diff options
author | 2008-03-10 10:56:55 -0400 | |
---|---|---|
committer | 2008-03-25 10:24:01 +0900 | |
commit | 1d5d236d309ab90fa6aedf712f586b3595721373 (patch) | |
tree | 983a6d65f59e8e4151ffbc6b60cd6275a5ec5c1d | |
parent | [IPV6]: Optimize hop-limit determination. (diff) | |
download | linux-1d5d236d309ab90fa6aedf712f586b3595721373.tar.gz linux-1d5d236d309ab90fa6aedf712f586b3595721373.tar.bz2 linux-1d5d236d309ab90fa6aedf712f586b3595721373.zip |
[IPV6]: Use bitfields for hop_limit and mcast_hops.
Save some bits for future extensions.
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
-rw-r--r-- | include/linux/ipv6.h | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h index 9b59e37afad9..87ae4e389ce1 100644 --- a/include/linux/ipv6.h +++ b/include/linux/ipv6.h @@ -274,8 +274,29 @@ struct ipv6_pinfo { __be32 flow_label; __u32 frag_size; - __s16 hop_limit; - __s16 mcast_hops; + + /* + * Packed in 16bits. + * Omit one shift by by putting the signed field at MSB. + */ +#if defined(__BIG_ENDIAN_BITFIELD) + __s16 hop_limit:9; + __u16 __unused_1:7; +#else + __u16 __unused_1:7; + __s16 hop_limit:9; +#endif + +#if defined(__BIG_ENDIAN_BITFIELD) + /* Packed in 16bits. */ + __s16 mcast_hops:9; + __u16 __unused_2:6, + mc_loop:1; +#else + __u16 mc_loop:1, + __unused_2:6; + __s16 mcast_hops:9; +#endif int mcast_oif; /* pktoption flags */ @@ -298,8 +319,7 @@ struct ipv6_pinfo { } rxopt; /* sockopt flags */ - __u8 mc_loop:1, - recverr:1, + __u8 recverr:1, sndflow:1, pmtudisc:2, ipv6only:1; |