summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>2008-03-10 10:56:55 -0400
committerYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>2008-03-25 10:24:01 +0900
commit1d5d236d309ab90fa6aedf712f586b3595721373 (patch)
tree983a6d65f59e8e4151ffbc6b60cd6275a5ec5c1d
parent6b75d0908185bf853b188afa6f269426f6554c5b (diff)
downloadlinux-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.h28
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;