Skip to content

Commit f556d1e

Browse files
committed
lib/route: add initial support for br_vlan module (WIP)
Add br_vlan module that initially supports setting global vlan options.
1 parent 83f29cf commit f556d1e

File tree

5 files changed

+1171
-0
lines changed

5 files changed

+1171
-0
lines changed

Makefile.am

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ libnlinclude_netlink_routedir = $(libnlincludedir)/netlink/route
111111
libnlinclude_netlink_route_HEADERS = \
112112
include/netlink/route/action.h \
113113
include/netlink/route/addr.h \
114+
include/netlink/route/br_vlan.h \
114115
include/netlink/route/class.h \
115116
include/netlink/route/classifier.h \
116117
include/netlink/route/link.h \
@@ -442,6 +443,7 @@ lib_libnl_route_3_la_SOURCES = \
442443
lib/route/act/skbedit.c \
443444
lib/route/act/vlan.c \
444445
lib/route/addr.c \
446+
lib/route/br_vlan.c \
445447
lib/route/class.c \
446448
lib/route/classid.c \
447449
lib/route/cls.c \

include/netlink/route/br_vlan.h

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
/* SPDX-License-Identifier: LGPL-2.1-only */
2+
3+
#ifndef NETLINK_BR_VLAN_H_
4+
#define NETLINK_BR_VLAN_H_
5+
6+
#include <netlink/netlink.h>
7+
#include <netlink/cache.h>
8+
#include <netlink/route/link.h>
9+
10+
#ifdef __cplusplus
11+
extern "C" {
12+
#endif
13+
14+
struct rtnl_br_vlan;
15+
struct rtnl_br_vlan_gopts_entry;
16+
// struct rtnl_br_vlan_entry;
17+
18+
struct rtnl_br_vlan *rtnl_br_vlan_alloc(void);
19+
void rtnl_br_vlan_put(struct rtnl_br_vlan *br_vlan);
20+
21+
struct rtnl_br_vlan_gopts_entry *rtnl_br_vlan_gopts_alloc(void);
22+
void rtnl_br_vlan_gopts_put(struct rtnl_br_vlan_gopts_entry *opts);
23+
24+
void rtnl_br_vlan_gopts_append(struct rtnl_br_vlan *br_vlan,
25+
struct rtnl_br_vlan_gopts_entry *opts);
26+
27+
// int rtnl_br_vlan_global_opts_build_change_request(
28+
// struct rtnl_br_vlan_gopts_entry *old,
29+
// struct rtnl_br_vlan_gopts_entry *tmpl, struct nl_msg **result);
30+
// int rtnl_br_vlan_global_opts_change(struct nl_sock *sk,
31+
// struct rtnl_br_vlan_gopts_entry *old,
32+
// struct rtnl_br_vlan_gopts_entry *tmpl);
33+
int rtnl_br_vlan_gopts_list_build_set_request(struct rtnl_br_vlan *opts_list,
34+
struct nl_msg **result);
35+
int rtnl_br_vlan_gopts_list_set(struct nl_sock *sk,
36+
struct rtnl_br_vlan *opts_list);
37+
38+
//////
39+
40+
int rtnl_br_vlan_set_ifindex(struct rtnl_br_vlan *br_vlan, uint32_t value);
41+
int rtnl_br_vlan_get_ifindex(struct rtnl_br_vlan *br_vlan, uint32_t *out);
42+
43+
void rtnl_br_vlan_add_gopts_entry(struct rtnl_br_vlan *br_vlan,
44+
struct rtnl_br_vlan_gopts_entry *entry);
45+
void rtnl_br_vlan_foreach_gopts_entry(
46+
struct rtnl_br_vlan *br_vlan,
47+
void (*cb)(struct rtnl_br_vlan_gopts_entry *, void *), void *arg);
48+
49+
int rtnl_br_vlan_gopts_entry_set_id(struct rtnl_br_vlan_gopts_entry *opts,
50+
uint16_t value);
51+
int rtnl_br_vlan_gopts_entry_get_id(struct rtnl_br_vlan_gopts_entry *opts,
52+
uint16_t *out);
53+
int rtnl_br_vlan_gopts_entry_set_range(struct rtnl_br_vlan_gopts_entry *opts,
54+
uint16_t value);
55+
int rtnl_br_vlan_gopts_entry_get_range(struct rtnl_br_vlan_gopts_entry *opts,
56+
uint16_t *out);
57+
int rtnl_br_vlan_gopts_entry_set_mcast_snooping(
58+
struct rtnl_br_vlan_gopts_entry *opts, uint8_t value);
59+
int rtnl_br_vlan_gopts_entry_get_mcast_snooping(
60+
struct rtnl_br_vlan_gopts_entry *opts, uint8_t *out);
61+
int rtnl_br_vlan_gopts_entry_set_mcast_igmp_version(
62+
struct rtnl_br_vlan_gopts_entry *opts, uint8_t value);
63+
int rtnl_br_vlan_gopts_entry_get_mcast_igmp_version(
64+
struct rtnl_br_vlan_gopts_entry *opts, uint8_t *out);
65+
int rtnl_br_vlan_gopts_entry_set_mcast_mld_version(
66+
struct rtnl_br_vlan_gopts_entry *opts, uint8_t value);
67+
int rtnl_br_vlan_gopts_entry_get_mcast_mld_version(
68+
struct rtnl_br_vlan_gopts_entry *opts, uint8_t *out);
69+
int rtnl_br_vlan_gopts_entry_set_mcast_last_member_cnt(
70+
struct rtnl_br_vlan_gopts_entry *opts, uint32_t value);
71+
int rtnl_br_vlan_gopts_entry_get_mcast_last_member_cnt(
72+
struct rtnl_br_vlan_gopts_entry *opts, uint32_t *out);
73+
int rtnl_br_vlan_gopts_entry_set_mcast_startup_query_cnt(
74+
struct rtnl_br_vlan_gopts_entry *opts, uint32_t value);
75+
int rtnl_br_vlan_gopts_entry_get_mcast_startup_query_cnt(
76+
struct rtnl_br_vlan_gopts_entry *opts, uint32_t *out);
77+
int rtnl_br_vlan_gopts_entry_set_mcast_last_member_intvl(
78+
struct rtnl_br_vlan_gopts_entry *opts, uint64_t value);
79+
int rtnl_br_vlan_gopts_entry_get_mcast_last_member_intvl(
80+
struct rtnl_br_vlan_gopts_entry *opts, uint64_t *out);
81+
int rtnl_br_vlan_gopts_entry_set_mcast_membership_intvl(
82+
struct rtnl_br_vlan_gopts_entry *opts, uint64_t value);
83+
int rtnl_br_vlan_gopts_entry_get_mcast_membership_intvl(
84+
struct rtnl_br_vlan_gopts_entry *opts, uint64_t *out);
85+
int rtnl_br_vlan_gopts_entry_set_mcast_querier_intvl(
86+
struct rtnl_br_vlan_gopts_entry *opts, uint64_t value);
87+
int rtnl_br_vlan_gopts_entry_get_mcast_querier_intvl(
88+
struct rtnl_br_vlan_gopts_entry *opts, uint64_t *out);
89+
int rtnl_br_vlan_gopts_entry_set_mcast_query_intvl(
90+
struct rtnl_br_vlan_gopts_entry *opts, uint64_t value);
91+
int rtnl_br_vlan_gopts_entry_get_mcast_query_intvl(
92+
struct rtnl_br_vlan_gopts_entry *opts, uint64_t *out);
93+
int rtnl_br_vlan_gopts_entry_set_mcast_query_response_intvl(
94+
struct rtnl_br_vlan_gopts_entry *opts, uint64_t value);
95+
int rtnl_br_vlan_gopts_entry_get_mcast_query_response_intvl(
96+
struct rtnl_br_vlan_gopts_entry *opts, uint64_t *out);
97+
int rtnl_br_vlan_gopts_entry_set_mcast_startup_query_intvl(
98+
struct rtnl_br_vlan_gopts_entry *opts, uint64_t value);
99+
int rtnl_br_vlan_gopts_entry_get_mcast_startup_query_intvl(
100+
struct rtnl_br_vlan_gopts_entry *opts, uint64_t *out);
101+
int rtnl_br_vlan_gopts_entry_set_mcast_querier(
102+
struct rtnl_br_vlan_gopts_entry *opts, uint8_t value);
103+
int rtnl_br_vlan_gopts_entry_get_mcast_querier(
104+
struct rtnl_br_vlan_gopts_entry *opts, uint8_t *out);
105+
int rtnl_br_vlan_gopts_entry_set_msti(struct rtnl_br_vlan_gopts_entry *opts,
106+
uint16_t value);
107+
int rtnl_br_vlan_gopts_entry_get_msti(struct rtnl_br_vlan_gopts_entry *opts,
108+
uint16_t *out);
109+
110+
// TODO: add getters
111+
112+
#ifdef __cplusplus
113+
}
114+
#endif
115+
116+
#endif /* NETLINK_BR_VLAN_H_ */

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,12 @@ 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;
67+
void rtnl_br_vlan_put(struct rtnl_br_vlan *);
68+
#define _nl_auto_rtnl_br_vlan _nl_auto(_nl_auto_rtnl_br_vlan_fcn)
69+
_NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_br_vlan *, _nl_auto_rtnl_br_vlan_fcn,
70+
rtnl_br_vlan_put);
71+
6672
/*****************************************************************************/
6773

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

0 commit comments

Comments
 (0)