xref: /linux-6.15/tools/include/uapi/linux/seg6.h (revision 94dfc73e)
13b296633SMathieu Xhonneux /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
23b296633SMathieu Xhonneux /*
33b296633SMathieu Xhonneux  *  SR-IPv6 implementation
43b296633SMathieu Xhonneux  *
53b296633SMathieu Xhonneux  *  Author:
63b296633SMathieu Xhonneux  *  David Lebrun <[email protected]>
73b296633SMathieu Xhonneux  *
83b296633SMathieu Xhonneux  *
93b296633SMathieu Xhonneux  *  This program is free software; you can redistribute it and/or
103b296633SMathieu Xhonneux  *      modify it under the terms of the GNU General Public License
113b296633SMathieu Xhonneux  *      as published by the Free Software Foundation; either version
123b296633SMathieu Xhonneux  *      2 of the License, or (at your option) any later version.
133b296633SMathieu Xhonneux  */
143b296633SMathieu Xhonneux 
153b296633SMathieu Xhonneux #ifndef _UAPI_LINUX_SEG6_H
163b296633SMathieu Xhonneux #define _UAPI_LINUX_SEG6_H
173b296633SMathieu Xhonneux 
183b296633SMathieu Xhonneux #include <linux/types.h>
193b296633SMathieu Xhonneux #include <linux/in6.h>		/* For struct in6_addr. */
203b296633SMathieu Xhonneux 
213b296633SMathieu Xhonneux /*
223b296633SMathieu Xhonneux  * SRH
233b296633SMathieu Xhonneux  */
243b296633SMathieu Xhonneux struct ipv6_sr_hdr {
253b296633SMathieu Xhonneux 	__u8	nexthdr;
263b296633SMathieu Xhonneux 	__u8	hdrlen;
273b296633SMathieu Xhonneux 	__u8	type;
283b296633SMathieu Xhonneux 	__u8	segments_left;
293b296633SMathieu Xhonneux 	__u8	first_segment; /* Represents the last_entry field of SRH */
303b296633SMathieu Xhonneux 	__u8	flags;
313b296633SMathieu Xhonneux 	__u16	tag;
323b296633SMathieu Xhonneux 
33*94dfc73eSGustavo A. R. Silva 	struct in6_addr segments[];
343b296633SMathieu Xhonneux };
353b296633SMathieu Xhonneux 
363b296633SMathieu Xhonneux #define SR6_FLAG1_PROTECTED	(1 << 6)
373b296633SMathieu Xhonneux #define SR6_FLAG1_OAM		(1 << 5)
383b296633SMathieu Xhonneux #define SR6_FLAG1_ALERT		(1 << 4)
393b296633SMathieu Xhonneux #define SR6_FLAG1_HMAC		(1 << 3)
403b296633SMathieu Xhonneux 
413b296633SMathieu Xhonneux #define SR6_TLV_INGRESS		1
423b296633SMathieu Xhonneux #define SR6_TLV_EGRESS		2
433b296633SMathieu Xhonneux #define SR6_TLV_OPAQUE		3
443b296633SMathieu Xhonneux #define SR6_TLV_PADDING		4
453b296633SMathieu Xhonneux #define SR6_TLV_HMAC		5
463b296633SMathieu Xhonneux 
473b296633SMathieu Xhonneux #define sr_has_hmac(srh) ((srh)->flags & SR6_FLAG1_HMAC)
483b296633SMathieu Xhonneux 
493b296633SMathieu Xhonneux struct sr6_tlv {
503b296633SMathieu Xhonneux 	__u8 type;
513b296633SMathieu Xhonneux 	__u8 len;
52*94dfc73eSGustavo A. R. Silva 	__u8 data[];
533b296633SMathieu Xhonneux };
543b296633SMathieu Xhonneux 
553b296633SMathieu Xhonneux #endif
56