-
Notifications
You must be signed in to change notification settings - Fork 318
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
include/linux-private: import 'seg6 local' headers from kernel tree
Add headers from 6995e2de6891c724bfeb2db33d7b87775f913ad1 (tag: v6.4).
- Loading branch information
Showing
5 changed files
with
261 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ | ||
/* | ||
* SR-IPv6 implementation | ||
* | ||
* Author: | ||
* David Lebrun <[email protected]> | ||
* | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License | ||
* as published by the Free Software Foundation; either version | ||
* 2 of the License, or (at your option) any later version. | ||
*/ | ||
|
||
#ifndef _LINUX_SEG6_H | ||
#define _LINUX_SEG6_H | ||
|
||
#include <linux/types.h> | ||
#include <linux/in6.h> /* For struct in6_addr. */ | ||
|
||
/* | ||
* SRH | ||
*/ | ||
struct ipv6_sr_hdr { | ||
__u8 nexthdr; | ||
__u8 hdrlen; | ||
__u8 type; | ||
__u8 segments_left; | ||
__u8 first_segment; /* Represents the last_entry field of SRH */ | ||
__u8 flags; | ||
__u16 tag; | ||
|
||
struct in6_addr segments[]; | ||
}; | ||
|
||
#define SR6_FLAG1_PROTECTED (1 << 6) | ||
#define SR6_FLAG1_OAM (1 << 5) | ||
#define SR6_FLAG1_ALERT (1 << 4) | ||
#define SR6_FLAG1_HMAC (1 << 3) | ||
|
||
#define SR6_TLV_INGRESS 1 | ||
#define SR6_TLV_EGRESS 2 | ||
#define SR6_TLV_OPAQUE 3 | ||
#define SR6_TLV_PADDING 4 | ||
#define SR6_TLV_HMAC 5 | ||
|
||
#define sr_has_hmac(srh) ((srh)->flags & SR6_FLAG1_HMAC) | ||
|
||
struct sr6_tlv { | ||
__u8 type; | ||
__u8 len; | ||
__u8 data[0]; | ||
}; | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | ||
#ifndef _LINUX_SEG6_HMAC_H | ||
#define _LINUX_SEG6_HMAC_H | ||
|
||
#include <linux/types.h> | ||
#include <linux/seg6.h> | ||
|
||
#define SEG6_HMAC_SECRET_LEN 64 | ||
#define SEG6_HMAC_FIELD_LEN 32 | ||
|
||
struct sr6_tlv_hmac { | ||
struct sr6_tlv tlvhdr; | ||
__u16 reserved; | ||
__be32 hmackeyid; | ||
__u8 hmac[SEG6_HMAC_FIELD_LEN]; | ||
}; | ||
|
||
enum { | ||
SEG6_HMAC_ALGO_SHA1 = 1, | ||
SEG6_HMAC_ALGO_SHA256 = 2, | ||
}; | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ | ||
/* | ||
* SR-IPv6 implementation | ||
* | ||
* Author: | ||
* David Lebrun <[email protected]> | ||
* | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License | ||
* as published by the Free Software Foundation; either version | ||
* 2 of the License, or (at your option) any later version. | ||
*/ | ||
|
||
#ifndef _LINUX_SEG6_IPTUNNEL_H | ||
#define _LINUX_SEG6_IPTUNNEL_H | ||
|
||
#include <linux/seg6.h> /* For struct ipv6_sr_hdr. */ | ||
|
||
enum { | ||
SEG6_IPTUNNEL_UNSPEC, | ||
SEG6_IPTUNNEL_SRH, | ||
__SEG6_IPTUNNEL_MAX, | ||
}; | ||
#define SEG6_IPTUNNEL_MAX (__SEG6_IPTUNNEL_MAX - 1) | ||
|
||
struct seg6_iptunnel_encap { | ||
int mode; | ||
struct ipv6_sr_hdr srh[]; | ||
}; | ||
|
||
#define SEG6_IPTUN_ENCAP_SIZE(x) ((sizeof(*x)) + (((x)->srh->hdrlen + 1) << 3)) | ||
|
||
enum { | ||
SEG6_IPTUN_MODE_INLINE, | ||
SEG6_IPTUN_MODE_ENCAP, | ||
SEG6_IPTUN_MODE_L2ENCAP, | ||
SEG6_IPTUN_MODE_ENCAP_RED, | ||
SEG6_IPTUN_MODE_L2ENCAP_RED, | ||
}; | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,137 @@ | ||
/* | ||
* SR-IPv6 implementation | ||
* | ||
* Author: | ||
* David Lebrun <[email protected]> | ||
* | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License | ||
* as published by the Free Software Foundation; either version | ||
* 2 of the License, or (at your option) any later version. | ||
*/ | ||
|
||
#ifndef _LINUX_SEG6_LOCAL_H | ||
#define _LINUX_SEG6_LOCAL_H | ||
|
||
#include <linux/seg6.h> | ||
|
||
enum { | ||
SEG6_LOCAL_UNSPEC, | ||
SEG6_LOCAL_ACTION, | ||
SEG6_LOCAL_SRH, | ||
SEG6_LOCAL_TABLE, | ||
SEG6_LOCAL_NH4, | ||
SEG6_LOCAL_NH6, | ||
SEG6_LOCAL_IIF, | ||
SEG6_LOCAL_OIF, | ||
SEG6_LOCAL_BPF, | ||
SEG6_LOCAL_VRFTABLE, | ||
SEG6_LOCAL_COUNTERS, | ||
SEG6_LOCAL_FLAVORS, | ||
__SEG6_LOCAL_MAX, | ||
}; | ||
#define SEG6_LOCAL_MAX (__SEG6_LOCAL_MAX - 1) | ||
|
||
enum { | ||
SEG6_LOCAL_ACTION_UNSPEC = 0, | ||
/* node segment */ | ||
SEG6_LOCAL_ACTION_END = 1, | ||
/* adjacency segment (IPv6 cross-connect) */ | ||
SEG6_LOCAL_ACTION_END_X = 2, | ||
/* lookup of next seg NH in table */ | ||
SEG6_LOCAL_ACTION_END_T = 3, | ||
/* decap and L2 cross-connect */ | ||
SEG6_LOCAL_ACTION_END_DX2 = 4, | ||
/* decap and IPv6 cross-connect */ | ||
SEG6_LOCAL_ACTION_END_DX6 = 5, | ||
/* decap and IPv4 cross-connect */ | ||
SEG6_LOCAL_ACTION_END_DX4 = 6, | ||
/* decap and lookup of DA in v6 table */ | ||
SEG6_LOCAL_ACTION_END_DT6 = 7, | ||
/* decap and lookup of DA in v4 table */ | ||
SEG6_LOCAL_ACTION_END_DT4 = 8, | ||
/* binding segment with insertion */ | ||
SEG6_LOCAL_ACTION_END_B6 = 9, | ||
/* binding segment with encapsulation */ | ||
SEG6_LOCAL_ACTION_END_B6_ENCAP = 10, | ||
/* binding segment with MPLS encap */ | ||
SEG6_LOCAL_ACTION_END_BM = 11, | ||
/* lookup last seg in table */ | ||
SEG6_LOCAL_ACTION_END_S = 12, | ||
/* forward to SR-unaware VNF with static proxy */ | ||
SEG6_LOCAL_ACTION_END_AS = 13, | ||
/* forward to SR-unaware VNF with masquerading */ | ||
SEG6_LOCAL_ACTION_END_AM = 14, | ||
/* custom BPF action */ | ||
SEG6_LOCAL_ACTION_END_BPF = 15, | ||
/* decap and lookup of DA in v4 or v6 table */ | ||
SEG6_LOCAL_ACTION_END_DT46 = 16, | ||
|
||
__SEG6_LOCAL_ACTION_MAX, | ||
}; | ||
|
||
#define SEG6_LOCAL_ACTION_MAX (__SEG6_LOCAL_ACTION_MAX - 1) | ||
|
||
enum { | ||
SEG6_LOCAL_BPF_PROG_UNSPEC, | ||
SEG6_LOCAL_BPF_PROG, | ||
SEG6_LOCAL_BPF_PROG_NAME, | ||
__SEG6_LOCAL_BPF_PROG_MAX, | ||
}; | ||
|
||
#define SEG6_LOCAL_BPF_PROG_MAX (__SEG6_LOCAL_BPF_PROG_MAX - 1) | ||
|
||
/* SRv6 Behavior counters are encoded as netlink attributes guaranteeing the | ||
* correct alignment. | ||
* Each counter is identified by a different attribute type (i.e. | ||
* SEG6_LOCAL_CNT_PACKETS). | ||
* | ||
* - SEG6_LOCAL_CNT_PACKETS: identifies a counter that counts the number of | ||
* packets that have been CORRECTLY processed by an SRv6 Behavior instance | ||
* (i.e., packets that generate errors or are dropped are NOT counted). | ||
* | ||
* - SEG6_LOCAL_CNT_BYTES: identifies a counter that counts the total amount | ||
* of traffic in bytes of all packets that have been CORRECTLY processed by | ||
* an SRv6 Behavior instance (i.e., packets that generate errors or are | ||
* dropped are NOT counted). | ||
* | ||
* - SEG6_LOCAL_CNT_ERRORS: identifies a counter that counts the number of | ||
* packets that have NOT been properly processed by an SRv6 Behavior instance | ||
* (i.e., packets that generate errors or are dropped). | ||
*/ | ||
enum { | ||
SEG6_LOCAL_CNT_UNSPEC, | ||
SEG6_LOCAL_CNT_PAD, /* pad for 64 bits values */ | ||
SEG6_LOCAL_CNT_PACKETS, | ||
SEG6_LOCAL_CNT_BYTES, | ||
SEG6_LOCAL_CNT_ERRORS, | ||
__SEG6_LOCAL_CNT_MAX, | ||
}; | ||
|
||
#define SEG6_LOCAL_CNT_MAX (__SEG6_LOCAL_CNT_MAX - 1) | ||
|
||
/* SRv6 End* Flavor attributes */ | ||
enum { | ||
SEG6_LOCAL_FLV_UNSPEC, | ||
SEG6_LOCAL_FLV_OPERATION, | ||
SEG6_LOCAL_FLV_LCBLOCK_BITS, | ||
SEG6_LOCAL_FLV_LCNODE_FN_BITS, | ||
__SEG6_LOCAL_FLV_MAX, | ||
}; | ||
|
||
#define SEG6_LOCAL_FLV_MAX (__SEG6_LOCAL_FLV_MAX - 1) | ||
|
||
/* Designed flavor operations for SRv6 End* Behavior */ | ||
enum { | ||
SEG6_LOCAL_FLV_OP_UNSPEC, | ||
SEG6_LOCAL_FLV_OP_PSP, | ||
SEG6_LOCAL_FLV_OP_USP, | ||
SEG6_LOCAL_FLV_OP_USD, | ||
SEG6_LOCAL_FLV_OP_NEXT_CSID, | ||
__SEG6_LOCAL_FLV_OP_MAX | ||
}; | ||
|
||
#define SEG6_LOCAL_FLV_OP_MAX (__SEG6_LOCAL_FLV_OP_MAX - 1) | ||
|
||
#endif |