On 02.11.2012 13:38, Gleb Smirnoff wrote:
   Hello networkers,

   some (most) of m_flags bits are describing features that can
be present on a packet only, not on a single mbuf. Since we are
close to exhaustion of available bits, and many subsystems prefer
to use one of M_PROTO bits instead of grabbing a flag, I propose

The use of M_PROTO for protocol and layer specific use is very much
its intended purpose and should be kept that way with overlays.  The
available range of M_PROTO can be extended with your proposed change.
M_PROTO could be split into mbuf and mbuf header flags.  Most of the
time they are also only relevant on packets.

to split m_flags to two parts:

I fully agree on the split.  The previous mixing of mbuf and mbuf header
flags was irritating and confusing.

In the m_flags remain:
#define M_EXT           0x00000001 /* has associated external storage */
#define M_PKTHDR        0x00000002 /* start of record */
#define M_EOR           0x00000004 /* end of record */
#define M_RDONLY        0x00000008 /* associated data is marked read-only */
and all M_PROTO flags.

struct pkthdr grows by one word and its new flag word now
posesses:

#define M_BCAST         0x00000200 /* send/received as link-level broadcast */
#define M_MCAST         0x00000400 /* send/received as link-level multicast */
#define M_FRAG          0x00000800 /* packet is a fragment of a larger packet */
#define M_FIRSTFRAG     0x00001000 /* packet is first fragment */
#define M_LASTFRAG      0x00002000 /* packet is last fragment */

I wonder if actually have any users of the M_*FRAG flags.  And if yes,
if it can be solved in a different way with less flags.

#define M_SKIP_FIREWALL 0x00004000 /* skip firewall processing */

This one should become an M_PROTO overlay.  It is only relevant within
a protocol layer.

#define M_VLANTAG       0x00010000 /* ether_vtag is valid */
#define M_PROMISC       0x00020000 /* packet was not for us */
#define M_FLOWID        0x00400000 /* deprecated: flowid is valid */
#define M_HASHTYPEBITS  0x0F000000 /* mask of bits holding flowid hash type */
>
Some M_PROTO abusements like M_FASTFWD_OURS and recently added M_IP_NEXTHOP
also go to the pkthdr mbuf flags.

On the contrary.  This isn't abuse of M_PROTO.  It's the exact pupose
of it.

P.S.
An attentive reader may have noticed that I missed M_NOFREE and M_FREELIST.
Yep, these flags coming from historical mbuf allocator from FreeBSD 4.x times
are about to be deleted, we carefully examine them, but never set. Patch
for review attached.

Looks good.  Go ahead from me.

--
Andre

_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to