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