-
Notifications
You must be signed in to change notification settings - Fork 314
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
17 changed files
with
902 additions
and
1 deletion.
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
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,104 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | ||
#ifndef _LINUX_NEXTHOP_H | ||
#define _LINUX_NEXTHOP_H | ||
|
||
#include <linux/types.h> | ||
|
||
struct nhmsg { | ||
unsigned char nh_family; | ||
unsigned char nh_scope; /* return only */ | ||
unsigned char nh_protocol; /* Routing protocol that installed nh */ | ||
unsigned char resvd; | ||
unsigned int nh_flags; /* RTNH_F flags */ | ||
}; | ||
|
||
/* entry in a nexthop group */ | ||
struct nexthop_grp { | ||
__u32 id; /* nexthop id - must exist */ | ||
__u8 weight; /* weight of this nexthop */ | ||
__u8 resvd1; | ||
__u16 resvd2; | ||
}; | ||
|
||
enum { | ||
NEXTHOP_GRP_TYPE_MPATH, /* hash-threshold nexthop group | ||
* default type if not specified | ||
*/ | ||
NEXTHOP_GRP_TYPE_RES, /* resilient nexthop group */ | ||
__NEXTHOP_GRP_TYPE_MAX, | ||
}; | ||
|
||
#define NEXTHOP_GRP_TYPE_MAX (__NEXTHOP_GRP_TYPE_MAX - 1) | ||
|
||
enum { | ||
NHA_UNSPEC, | ||
NHA_ID, /* u32; id for nexthop. id == 0 means auto-assign */ | ||
|
||
NHA_GROUP, /* array of nexthop_grp */ | ||
NHA_GROUP_TYPE, /* u16 one of NEXTHOP_GRP_TYPE */ | ||
/* if NHA_GROUP attribute is added, no other attributes can be set */ | ||
|
||
NHA_BLACKHOLE, /* flag; nexthop used to blackhole packets */ | ||
/* if NHA_BLACKHOLE is added, OIF, GATEWAY, ENCAP can not be set */ | ||
|
||
NHA_OIF, /* u32; nexthop device */ | ||
NHA_GATEWAY, /* be32 (IPv4) or in6_addr (IPv6) gw address */ | ||
NHA_ENCAP_TYPE, /* u16; lwt encap type */ | ||
NHA_ENCAP, /* lwt encap data */ | ||
|
||
/* NHA_OIF can be appended to dump request to return only | ||
* nexthops using given device | ||
*/ | ||
NHA_GROUPS, /* flag; only return nexthop groups in dump */ | ||
NHA_MASTER, /* u32; only return nexthops with given master dev */ | ||
|
||
NHA_FDB, /* flag; nexthop belongs to a bridge fdb */ | ||
/* if NHA_FDB is added, OIF, BLACKHOLE, ENCAP cannot be set */ | ||
|
||
/* nested; resilient nexthop group attributes */ | ||
NHA_RES_GROUP, | ||
/* nested; nexthop bucket attributes */ | ||
NHA_RES_BUCKET, | ||
|
||
__NHA_MAX, | ||
}; | ||
|
||
#define NHA_MAX (__NHA_MAX - 1) | ||
|
||
enum { | ||
NHA_RES_GROUP_UNSPEC, | ||
/* Pad attribute for 64-bit alignment. */ | ||
NHA_RES_GROUP_PAD = NHA_RES_GROUP_UNSPEC, | ||
|
||
/* u16; number of nexthop buckets in a resilient nexthop group */ | ||
NHA_RES_GROUP_BUCKETS, | ||
/* clock_t as u32; nexthop bucket idle timer (per-group) */ | ||
NHA_RES_GROUP_IDLE_TIMER, | ||
/* clock_t as u32; nexthop unbalanced timer */ | ||
NHA_RES_GROUP_UNBALANCED_TIMER, | ||
/* clock_t as u64; nexthop unbalanced time */ | ||
NHA_RES_GROUP_UNBALANCED_TIME, | ||
|
||
__NHA_RES_GROUP_MAX, | ||
}; | ||
|
||
#define NHA_RES_GROUP_MAX (__NHA_RES_GROUP_MAX - 1) | ||
|
||
enum { | ||
NHA_RES_BUCKET_UNSPEC, | ||
/* Pad attribute for 64-bit alignment. */ | ||
NHA_RES_BUCKET_PAD = NHA_RES_BUCKET_UNSPEC, | ||
|
||
/* u16; nexthop bucket index */ | ||
NHA_RES_BUCKET_INDEX, | ||
/* clock_t as u64; nexthop bucket idle time */ | ||
NHA_RES_BUCKET_IDLE_TIME, | ||
/* u32; nexthop id assigned to the nexthop bucket */ | ||
NHA_RES_BUCKET_NH_ID, | ||
|
||
__NHA_RES_BUCKET_MAX, | ||
}; | ||
|
||
#define NHA_RES_BUCKET_MAX (__NHA_RES_BUCKET_MAX - 1) | ||
|
||
#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
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
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: LGPL-2.1-only */ | ||
/* | ||
* Copyright (c) 2022 Stanislav Zaikin <[email protected]> | ||
*/ | ||
|
||
#ifndef __NETLINK_CLI_NH_H_ | ||
#define __NETLINK_CLI_NH_H_ | ||
|
||
#include <netlink/route/nh.h> | ||
#include <netlink/cli/utils.h> | ||
|
||
#ifdef __cplusplus | ||
extern "C" { | ||
#endif | ||
|
||
extern struct rtnl_nh *nl_cli_nh_alloc(void); | ||
extern struct nl_cache *nl_cli_nh_alloc_cache(struct nl_sock *); | ||
|
||
#ifdef __cplusplus | ||
} | ||
#endif | ||
|
||
#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
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,47 @@ | ||
/* SPDX-License-Identifier: LGPL-2.1-only */ | ||
/* | ||
* Copyright (c) 2022 Stanislav Zaikin <[email protected] > | ||
*/ | ||
|
||
#ifndef NETLINK_ROUTE_NH_H_ | ||
#define NETLINK_ROUTE_NH_H_ | ||
|
||
#include <netlink/netlink.h> | ||
#include <netlink/addr.h> | ||
|
||
#ifdef __cplusplus | ||
extern "C" { | ||
#endif | ||
|
||
struct rtnl_nh; | ||
|
||
extern int rtnl_nh_alloc_cache(struct nl_sock *sk, int family, struct nl_cache **result); | ||
extern struct rtnl_nh * rtnl_nh_alloc(void); | ||
extern struct rtnl_nh * rtnl_nh_clone(struct rtnl_nh *); | ||
extern void rtnl_nh_put(struct rtnl_nh *); | ||
|
||
extern struct rtnl_nh *rtnl_nh_get(struct nl_cache *cache, int nhid); | ||
|
||
extern int rtnl_nh_compare(struct rtnl_nh *, struct rtnl_nh *, | ||
uint32_t, int); | ||
|
||
extern void rtnl_nh_dump(struct rtnl_nh *, struct nl_dump_params *); | ||
|
||
extern int rtnl_nh_set_gateway(struct rtnl_nh *, struct nl_addr *); | ||
extern struct nl_addr * rtnl_nh_get_gateway(struct rtnl_nh *); | ||
|
||
extern int rtnl_nh_set_fdb(struct rtnl_nh *, int value); | ||
extern int rtnl_nh_get_fdb(struct rtnl_nh *); | ||
|
||
extern uint32_t rtnl_nh_get_group_entry(struct rtnl_nh *, int n); | ||
extern int rtnl_nh_get_group_size(struct rtnl_nh *); | ||
|
||
extern uint32_t rtnl_nh_get_id(struct rtnl_nh *); | ||
extern int rtnl_nh_get_oif(struct rtnl_nh *); | ||
|
||
#ifdef __cplusplus | ||
} | ||
#endif | ||
|
||
#endif | ||
|
Oops, something went wrong.