Skip to content

Commit d9c1289

Browse files
committed
lib/route: add initial support for br_vlan module
Add br_vlan global_opts module to support setting global VLAN options on bridge master interfaces. There is currently no support for cache operations and the non-global options counterpart is not implemented.
1 parent e82c638 commit d9c1289

File tree

5 files changed

+2481
-0
lines changed

5 files changed

+2481
-0
lines changed

Makefile.am

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,10 @@ libnlinclude_netlink_route_act_HEADERS = \
136136
include/netlink/route/act/skbedit.h \
137137
include/netlink/route/act/vlan.h \
138138
$(NULL)
139+
libnlinclude_netlink_route_br_vlandir = $(libnlincludedir)/netlink/route/br_vlan
140+
libnlinclude_netlink_route_br_vlan_HEADERS = \
141+
include/netlink/route/br_vlan/global_opts.h \
142+
$(NULL)
139143
libnlinclude_netlink_route_clsdir = $(libnlincludedir)/netlink/route/cls
140144
libnlinclude_netlink_route_cls_HEADERS = \
141145
include/netlink/route/cls/basic.h \
@@ -239,6 +243,7 @@ public_headers = \
239243
$(libnlinclude_netlink_netfilter_HEADERS) \
240244
$(libnlinclude_netlink_route_HEADERS) \
241245
$(libnlinclude_netlink_route_act_HEADERS) \
246+
$(libnlinclude_netlink_route_br_vlan_HEADERS) \
242247
$(libnlinclude_netlink_route_cls_HEADERS) \
243248
$(libnlinclude_netlink_route_cls_ematch_HEADERS) \
244249
$(libnlinclude_netlink_route_link_HEADERS) \
@@ -442,6 +447,7 @@ lib_libnl_route_3_la_SOURCES = \
442447
lib/route/act/skbedit.c \
443448
lib/route/act/vlan.c \
444449
lib/route/addr.c \
450+
lib/route/br_vlan/global_opts.c \
445451
lib/route/class.c \
446452
lib/route/classid.c \
447453
lib/route/cls.c \
Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
/* SPDX-License-Identifier: LGPL-2.1-only */
2+
3+
#ifndef NETLINK_BR_VLAN_GLOBAL_OPTS_H_
4+
#define NETLINK_BR_VLAN_GLOBAL_OPTS_H_
5+
6+
#include <netlink/netlink.h>
7+
8+
#ifdef __cplusplus
9+
extern "C" {
10+
#endif
11+
12+
struct rtnl_br_vlan_gopts;
13+
struct rtnl_br_vlan_gopts_entry;
14+
15+
struct rtnl_br_vlan_gopts *rtnl_br_vlan_gopts_alloc(void);
16+
void rtnl_br_vlan_gopts_put(struct rtnl_br_vlan_gopts *gopts);
17+
18+
struct rtnl_br_vlan_gopts_entry *rtnl_br_vlan_gopts_entry_alloc(void);
19+
void rtnl_br_vlan_gopts_entry_free(struct rtnl_br_vlan_gopts_entry *entry);
20+
struct rtnl_br_vlan_gopts_entry *
21+
rtnl_br_vlan_gopts_entry_clone(const struct rtnl_br_vlan_gopts_entry *entry);
22+
23+
int rtnl_br_vlan_gopts_build_modify_request(
24+
const struct rtnl_br_vlan_gopts *gopts, struct nl_msg **result);
25+
26+
int rtnl_br_vlan_gopts_modify(struct nl_sock *sk,
27+
const struct rtnl_br_vlan_gopts *gopts);
28+
29+
int rtnl_br_vlan_gopts_build_get_request(uint32_t ifindex,
30+
struct nl_msg **result);
31+
32+
int rtnl_br_vlan_gopts_get_kernel(struct nl_sock *sk, uint32_t ifindex,
33+
struct rtnl_br_vlan_gopts **result);
34+
35+
int rtnl_br_vlan_gopts_set_ifindex(struct rtnl_br_vlan_gopts *gopts,
36+
uint32_t value);
37+
int rtnl_br_vlan_gopts_get_ifindex(const struct rtnl_br_vlan_gopts *gopts,
38+
uint32_t *out);
39+
40+
int rtnl_br_vlan_gopts_set_entry(struct rtnl_br_vlan_gopts *gopts,
41+
const struct rtnl_br_vlan_gopts_entry *entry);
42+
int rtnl_br_vlan_gopts_set_entry_range(
43+
struct rtnl_br_vlan_gopts *gopts,
44+
const struct rtnl_br_vlan_gopts_entry *entry, uint16_t vid_end);
45+
46+
int rtnl_br_vlan_gopts_unset_entry(struct rtnl_br_vlan_gopts *gopts,
47+
uint16_t vid);
48+
int rtnl_br_vlan_gopts_unset_entry_range(struct rtnl_br_vlan_gopts *gopts,
49+
uint16_t vid_start, uint16_t vid_end);
50+
51+
int rtnl_br_vlan_gopts_get_entry(const struct rtnl_br_vlan_gopts *gopts,
52+
uint16_t vid,
53+
struct rtnl_br_vlan_gopts_entry **out);
54+
55+
int rtnl_br_vlan_gopts_foreach_gopts_entry(
56+
const struct rtnl_br_vlan_gopts *gopts,
57+
void (*cb)(struct rtnl_br_vlan_gopts_entry *entry, void *arg),
58+
void *arg);
59+
60+
int rtnl_br_vlan_gopts_entry_set_vid(struct rtnl_br_vlan_gopts_entry *entry,
61+
uint16_t value);
62+
int rtnl_br_vlan_gopts_entry_get_vid(
63+
const struct rtnl_br_vlan_gopts_entry *entry, uint16_t *out);
64+
65+
int rtnl_br_vlan_gopts_entry_set_mcast_snooping(
66+
struct rtnl_br_vlan_gopts_entry *entry, uint8_t value);
67+
int rtnl_br_vlan_gopts_entry_unset_mcast_snooping(
68+
struct rtnl_br_vlan_gopts_entry *entry);
69+
int rtnl_br_vlan_gopts_entry_get_mcast_snooping(
70+
const struct rtnl_br_vlan_gopts_entry *entry, uint8_t *out);
71+
72+
int rtnl_br_vlan_gopts_entry_set_mcast_igmp_version(
73+
struct rtnl_br_vlan_gopts_entry *entry, uint8_t value);
74+
int rtnl_br_vlan_gopts_entry_unset_mcast_igmp_version(
75+
struct rtnl_br_vlan_gopts_entry *entry);
76+
int rtnl_br_vlan_gopts_entry_get_mcast_igmp_version(
77+
const struct rtnl_br_vlan_gopts_entry *entry, uint8_t *out);
78+
79+
int rtnl_br_vlan_gopts_entry_set_mcast_mld_version(
80+
struct rtnl_br_vlan_gopts_entry *entry, uint8_t value);
81+
int rtnl_br_vlan_gopts_entry_unset_mcast_mld_version(
82+
struct rtnl_br_vlan_gopts_entry *entry);
83+
int rtnl_br_vlan_gopts_entry_get_mcast_mld_version(
84+
const struct rtnl_br_vlan_gopts_entry *entry, uint8_t *out);
85+
86+
int rtnl_br_vlan_gopts_entry_set_mcast_last_member_cnt(
87+
struct rtnl_br_vlan_gopts_entry *entry, uint32_t value);
88+
int rtnl_br_vlan_gopts_entry_unset_mcast_last_member_cnt(
89+
struct rtnl_br_vlan_gopts_entry *entry);
90+
int rtnl_br_vlan_gopts_entry_get_mcast_last_member_cnt(
91+
const struct rtnl_br_vlan_gopts_entry *entry, uint32_t *out);
92+
93+
int rtnl_br_vlan_gopts_entry_set_mcast_startup_query_cnt(
94+
struct rtnl_br_vlan_gopts_entry *entry, uint32_t value);
95+
int rtnl_br_vlan_gopts_entry_unset_mcast_startup_query_cnt(
96+
struct rtnl_br_vlan_gopts_entry *entry);
97+
int rtnl_br_vlan_gopts_entry_get_mcast_startup_query_cnt(
98+
const struct rtnl_br_vlan_gopts_entry *entry, uint32_t *out);
99+
100+
int rtnl_br_vlan_gopts_entry_set_mcast_last_member_intvl(
101+
struct rtnl_br_vlan_gopts_entry *entry, uint64_t value);
102+
int rtnl_br_vlan_gopts_entry_unset_mcast_last_member_intvl(
103+
struct rtnl_br_vlan_gopts_entry *entry);
104+
int rtnl_br_vlan_gopts_entry_get_mcast_last_member_intvl(
105+
const struct rtnl_br_vlan_gopts_entry *entry, uint64_t *out);
106+
107+
int rtnl_br_vlan_gopts_entry_set_mcast_membership_intvl(
108+
struct rtnl_br_vlan_gopts_entry *entry, uint64_t value);
109+
int rtnl_br_vlan_gopts_entry_unset_mcast_membership_intvl(
110+
struct rtnl_br_vlan_gopts_entry *entry);
111+
int rtnl_br_vlan_gopts_entry_get_mcast_membership_intvl(
112+
const struct rtnl_br_vlan_gopts_entry *entry, uint64_t *out);
113+
114+
int rtnl_br_vlan_gopts_entry_set_mcast_querier_intvl(
115+
struct rtnl_br_vlan_gopts_entry *entry, uint64_t value);
116+
int rtnl_br_vlan_gopts_entry_unset_mcast_querier_intvl(
117+
struct rtnl_br_vlan_gopts_entry *entry);
118+
int rtnl_br_vlan_gopts_entry_get_mcast_querier_intvl(
119+
const struct rtnl_br_vlan_gopts_entry *entry, uint64_t *out);
120+
121+
int rtnl_br_vlan_gopts_entry_set_mcast_query_intvl(
122+
struct rtnl_br_vlan_gopts_entry *entry, uint64_t value);
123+
int rtnl_br_vlan_gopts_entry_unset_mcast_query_intvl(
124+
struct rtnl_br_vlan_gopts_entry *entry);
125+
int rtnl_br_vlan_gopts_entry_get_mcast_query_intvl(
126+
const struct rtnl_br_vlan_gopts_entry *entry, uint64_t *out);
127+
128+
int rtnl_br_vlan_gopts_entry_set_mcast_query_response_intvl(
129+
struct rtnl_br_vlan_gopts_entry *entry, uint64_t value);
130+
int rtnl_br_vlan_gopts_entry_unset_mcast_query_response_intvl(
131+
struct rtnl_br_vlan_gopts_entry *entry);
132+
int rtnl_br_vlan_gopts_entry_get_mcast_query_response_intvl(
133+
const struct rtnl_br_vlan_gopts_entry *entry, uint64_t *out);
134+
135+
int rtnl_br_vlan_gopts_entry_set_mcast_startup_query_intvl(
136+
struct rtnl_br_vlan_gopts_entry *entry, uint64_t value);
137+
int rtnl_br_vlan_gopts_entry_unset_mcast_startup_query_intvl(
138+
struct rtnl_br_vlan_gopts_entry *entry);
139+
int rtnl_br_vlan_gopts_entry_get_mcast_startup_query_intvl(
140+
const struct rtnl_br_vlan_gopts_entry *entry, uint64_t *out);
141+
142+
int rtnl_br_vlan_gopts_entry_set_mcast_querier(
143+
struct rtnl_br_vlan_gopts_entry *entry, uint8_t value);
144+
int rtnl_br_vlan_gopts_entry_unset_mcast_querier(
145+
struct rtnl_br_vlan_gopts_entry *entry);
146+
int rtnl_br_vlan_gopts_entry_get_mcast_querier(
147+
const struct rtnl_br_vlan_gopts_entry *entry, uint8_t *out);
148+
149+
int rtnl_br_vlan_gopts_entry_set_msti(struct rtnl_br_vlan_gopts_entry *entry,
150+
uint16_t value);
151+
int rtnl_br_vlan_gopts_entry_unset_msti(struct rtnl_br_vlan_gopts_entry *entry);
152+
int rtnl_br_vlan_gopts_entry_get_msti(
153+
const struct rtnl_br_vlan_gopts_entry *entry, uint16_t *out);
154+
155+
#ifdef __cplusplus
156+
}
157+
#endif
158+
159+
#endif /* NETLINK_BR_VLAN_GLOBAL_OPTS_H_ */

include/nl-aux-route/nl-route.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,21 @@ void rtnl_cls_put(struct rtnl_cls *);
6363
_NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_cls *, _nl_auto_rtnl_cls_fcn,
6464
rtnl_cls_put);
6565

66+
struct rtnl_br_vlan_gopts;
67+
void rtnl_br_vlan_gopts_put(struct rtnl_br_vlan_gopts *);
68+
#define _nl_auto_rtnl_br_vlan_gopts _nl_auto(_nl_auto_rtnl_br_vlan_gopts_fcn)
69+
_NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_br_vlan_gopts *,
70+
_nl_auto_rtnl_br_vlan_gopts_fcn,
71+
rtnl_br_vlan_gopts_put);
72+
73+
struct rtnl_br_vlan_gopts_entry;
74+
void rtnl_br_vlan_gopts_entry_free(struct rtnl_br_vlan_gopts_entry *);
75+
#define _nl_auto_rtnl_br_vlan_gopts_entry \
76+
_nl_auto(_nl_auto_rtnl_br_vlan_gopts_entry_fcn)
77+
_NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_br_vlan_gopts_entry *,
78+
_nl_auto_rtnl_br_vlan_gopts_entry_fcn,
79+
rtnl_br_vlan_gopts_entry_free);
80+
6681
/*****************************************************************************/
6782

6883
static inline int _rtnl_act_append_get(struct rtnl_act **head,

0 commit comments

Comments
 (0)