^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * SR-IPv6 implementation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Author:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * David Lebrun <david.lebrun@uclouvain.be>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) * This program is free software; you can redistribute it and/or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) * modify it under the terms of the GNU General Public License
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) * as published by the Free Software Foundation; either version
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) * 2 of the License, or (at your option) any later version.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #ifndef _UAPI_LINUX_SEG6_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #define _UAPI_LINUX_SEG6_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #include <linux/in6.h> /* For struct in6_addr. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) * SRH
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) struct ipv6_sr_hdr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) __u8 nexthdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) __u8 hdrlen;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) __u8 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) __u8 segments_left;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) __u8 first_segment; /* Represents the last_entry field of SRH */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) __u8 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) __u16 tag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) struct in6_addr segments[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) #define SR6_FLAG1_PROTECTED (1 << 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) #define SR6_FLAG1_OAM (1 << 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) #define SR6_FLAG1_ALERT (1 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) #define SR6_FLAG1_HMAC (1 << 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) #define SR6_TLV_INGRESS 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) #define SR6_TLV_EGRESS 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) #define SR6_TLV_OPAQUE 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) #define SR6_TLV_PADDING 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #define SR6_TLV_HMAC 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #define sr_has_hmac(srh) ((srh)->flags & SR6_FLAG1_HMAC)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) struct sr6_tlv {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) __u8 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) __u8 len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) __u8 data[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #endif