History

netfilter: ip6t_srh: extend SRH matching for previous, next and last SID

IPv6 Segment Routing Header (SRH) contains a list of SIDs to be crossed by SR encapsulated packet. Each SID is encoded as an IPv6 prefix. When a Firewall receives an SR encapsulated packet, it should be able to identify which node previously processed the packet (previous SID), which node is going to process the packet next (next SID), and which node is the last to process the packet (last SID) which represent the final destination of the packet in case of inline SR mode. An example use-case of using these features could be SID list that includes two firewalls. When the second firewall receives a packet, it can check whether the packet has been processed by the first firewall or not. Based on that check, it decides to apply all rules, apply just subset of the rules, or totally skip all rules and forward the packet to the next SID. This patch extends SRH match to support matching previous SID, next SID, and last SID.

Ahmed Abdelsalam committed 8 years ago

Commit c1c7e441 parent 75e72f02 files · +205 −11Browse files

Showing the changes to include/uapi/linux (1 of 2 files). Show all

Unified · Split

include/uapi/linux/netfilter_ipv6/ip6t_srh.h+41−2
@@ -17,7 +17,10 @@ · 16 unmodified lines
1717 #define IP6T_SRH_LAST_GT 0x0100
1818 #define IP6T_SRH_LAST_LT 0x0200
1919 #define IP6T_SRH_TAG 0x0400
20−#define IP6T_SRH_MASK 0x07FF
20+#define IP6T_SRH_PSID 0x0800
21+#define IP6T_SRH_NSID 0x1000
22+#define IP6T_SRH_LSID 0x2000
23+#define IP6T_SRH_MASK 0x3FFF
2124
2225 /* Values for "mt_invflags" field in struct ip6t_srh */
2326 #define IP6T_SRH_INV_NEXTHDR 0x0001
@@ -31,7 +34,10 @@ · 7 unmodified lines
3134 #define IP6T_SRH_INV_LAST_GT 0x0100
3235 #define IP6T_SRH_INV_LAST_LT 0x0200
3336 #define IP6T_SRH_INV_TAG 0x0400
34−#define IP6T_SRH_INV_MASK 0x07FF
37+#define IP6T_SRH_INV_PSID 0x0800
38+#define IP6T_SRH_INV_NSID 0x1000
39+#define IP6T_SRH_INV_LSID 0x2000
40+#define IP6T_SRH_INV_MASK 0x3FFF
3541
3642 /**
3743 * struct ip6t_srh - SRH match options
@@ -54,4 +60,37 @@ struct ip6t_srh { · 16 unmodified lines
5460 __u16 mt_invflags;
5561 };
5662
63+/**
64+ * struct ip6t_srh1 - SRH match options (revision 1)
65+ * @ next_hdr: Next header field of SRH
66+ * @ hdr_len: Extension header length field of SRH
67+ * @ segs_left: Segments left field of SRH
68+ * @ last_entry: Last entry field of SRH
69+ * @ tag: Tag field of SRH
70+ * @ psid_addr: Address of previous SID in SRH SID list
71+ * @ nsid_addr: Address of NEXT SID in SRH SID list
72+ * @ lsid_addr: Address of LAST SID in SRH SID list
73+ * @ psid_msk: Mask of previous SID in SRH SID list
74+ * @ nsid_msk: Mask of next SID in SRH SID list
75+ * @ lsid_msk: MAsk of last SID in SRH SID list
76+ * @ mt_flags: match options
77+ * @ mt_invflags: Invert the sense of match options
78+ */
79+
80+struct ip6t_srh1 {
81+ __u8 next_hdr;
82+ __u8 hdr_len;
83+ __u8 segs_left;
84+ __u8 last_entry;
85+ __u16 tag;
86+ struct in6_addr psid_addr;
87+ struct in6_addr nsid_addr;
88+ struct in6_addr lsid_addr;
89+ struct in6_addr psid_msk;
90+ struct in6_addr nsid_msk;
91+ struct in6_addr lsid_msk;
92+ __u16 mt_flags;
93+ __u16 mt_invflags;
94+};
95+
5796 #endif /*_IP6T_SRH_H*/