Skip to content

Commit 034218a

Browse files
committedOct 14, 2024·
sync to upstream 01b6b9315f15 ("Merge branch net-ti-ethernet-warnings")
Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 818eb2b commit 034218a

File tree

4 files changed

+225
-12
lines changed

4 files changed

+225
-12
lines changed
 

‎generated/netdev-user.c

+128
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ static const char * const netdev_op_strmap[] = {
2525
[NETDEV_CMD_QUEUE_GET] = "queue-get",
2626
[NETDEV_CMD_NAPI_GET] = "napi-get",
2727
[NETDEV_CMD_QSTATS_GET] = "qstats-get",
28+
[NETDEV_CMD_BIND_RX] = "bind-rx",
2829
};
2930

3031
const char *netdev_op_str(int op)
@@ -114,6 +115,16 @@ const struct ynl_policy_nest netdev_page_pool_info_nest = {
114115
.table = netdev_page_pool_info_policy,
115116
};
116117

118+
const struct ynl_policy_attr netdev_queue_id_policy[NETDEV_A_QUEUE_MAX + 1] = {
119+
[NETDEV_A_QUEUE_ID] = { .name = "id", .type = YNL_PT_U32, },
120+
[NETDEV_A_QUEUE_TYPE] = { .name = "type", .type = YNL_PT_U32, },
121+
};
122+
123+
const struct ynl_policy_nest netdev_queue_id_nest = {
124+
.max_attr = NETDEV_A_QUEUE_MAX,
125+
.table = netdev_queue_id_policy,
126+
};
127+
117128
const struct ynl_policy_attr netdev_dev_policy[NETDEV_A_DEV_MAX + 1] = {
118129
[NETDEV_A_DEV_IFINDEX] = { .name = "ifindex", .type = YNL_PT_U32, },
119130
[NETDEV_A_DEV_PAD] = { .name = "pad", .type = YNL_PT_IGNORE, },
@@ -135,6 +146,7 @@ const struct ynl_policy_attr netdev_page_pool_policy[NETDEV_A_PAGE_POOL_MAX + 1]
135146
[NETDEV_A_PAGE_POOL_INFLIGHT] = { .name = "inflight", .type = YNL_PT_UINT, },
136147
[NETDEV_A_PAGE_POOL_INFLIGHT_MEM] = { .name = "inflight-mem", .type = YNL_PT_UINT, },
137148
[NETDEV_A_PAGE_POOL_DETACH_TIME] = { .name = "detach-time", .type = YNL_PT_UINT, },
149+
[NETDEV_A_PAGE_POOL_DMABUF] = { .name = "dmabuf", .type = YNL_PT_U32, },
138150
};
139151

140152
const struct ynl_policy_nest netdev_page_pool_nest = {
@@ -167,6 +179,7 @@ const struct ynl_policy_attr netdev_queue_policy[NETDEV_A_QUEUE_MAX + 1] = {
167179
[NETDEV_A_QUEUE_IFINDEX] = { .name = "ifindex", .type = YNL_PT_U32, },
168180
[NETDEV_A_QUEUE_TYPE] = { .name = "type", .type = YNL_PT_U32, },
169181
[NETDEV_A_QUEUE_NAPI_ID] = { .name = "napi-id", .type = YNL_PT_U32, },
182+
[NETDEV_A_QUEUE_DMABUF] = { .name = "dmabuf", .type = YNL_PT_U32, },
170183
};
171184

172185
const struct ynl_policy_nest netdev_queue_nest = {
@@ -225,6 +238,18 @@ const struct ynl_policy_nest netdev_qstats_nest = {
225238
.table = netdev_qstats_policy,
226239
};
227240

241+
const struct ynl_policy_attr netdev_dmabuf_policy[NETDEV_A_DMABUF_MAX + 1] = {
242+
[NETDEV_A_DMABUF_IFINDEX] = { .name = "ifindex", .type = YNL_PT_U32, },
243+
[NETDEV_A_DMABUF_QUEUES] = { .name = "queues", .type = YNL_PT_NEST, .nest = &netdev_queue_id_nest, },
244+
[NETDEV_A_DMABUF_FD] = { .name = "fd", .type = YNL_PT_U32, },
245+
[NETDEV_A_DMABUF_ID] = { .name = "id", .type = YNL_PT_U32, },
246+
};
247+
248+
const struct ynl_policy_nest netdev_dmabuf_nest = {
249+
.max_attr = NETDEV_A_DMABUF_MAX,
250+
.table = netdev_dmabuf_policy,
251+
};
252+
228253
/* Common nested types */
229254
void netdev_page_pool_info_free(struct netdev_page_pool_info *obj)
230255
{
@@ -270,6 +295,25 @@ int netdev_page_pool_info_parse(struct ynl_parse_arg *yarg,
270295
return 0;
271296
}
272297

298+
void netdev_queue_id_free(struct netdev_queue_id *obj)
299+
{
300+
}
301+
302+
int netdev_queue_id_put(struct nlmsghdr *nlh, unsigned int attr_type,
303+
struct netdev_queue_id *obj)
304+
{
305+
struct nlattr *nest;
306+
307+
nest = ynl_attr_nest_start(nlh, attr_type);
308+
if (obj->_present.id)
309+
ynl_attr_put_u32(nlh, NETDEV_A_QUEUE_ID, obj->id);
310+
if (obj->_present.type)
311+
ynl_attr_put_u32(nlh, NETDEV_A_QUEUE_TYPE, obj->type);
312+
ynl_attr_nest_end(nlh, nest);
313+
314+
return 0;
315+
}
316+
273317
/* ============== NETDEV_CMD_DEV_GET ============== */
274318
/* NETDEV_CMD_DEV_GET - do */
275319
void netdev_dev_get_req_free(struct netdev_dev_get_req *req)
@@ -453,6 +497,11 @@ int netdev_page_pool_get_rsp_parse(const struct nlmsghdr *nlh,
453497
return YNL_PARSE_CB_ERROR;
454498
dst->_present.detach_time = 1;
455499
dst->detach_time = ynl_attr_get_uint(attr);
500+
} else if (type == NETDEV_A_PAGE_POOL_DMABUF) {
501+
if (ynl_attr_validate(yarg, attr))
502+
return YNL_PARSE_CB_ERROR;
503+
dst->_present.dmabuf = 1;
504+
dst->dmabuf = ynl_attr_get_u32(attr);
456505
}
457506
}
458507

@@ -752,6 +801,11 @@ int netdev_queue_get_rsp_parse(const struct nlmsghdr *nlh,
752801
return YNL_PARSE_CB_ERROR;
753802
dst->_present.ifindex = 1;
754803
dst->ifindex = ynl_attr_get_u32(attr);
804+
} else if (type == NETDEV_A_QUEUE_DMABUF) {
805+
if (ynl_attr_validate(yarg, attr))
806+
return YNL_PARSE_CB_ERROR;
807+
dst->_present.dmabuf = 1;
808+
dst->dmabuf = ynl_attr_get_u32(attr);
755809
}
756810
}
757811

@@ -1077,6 +1131,80 @@ netdev_qstats_get_dump(struct ynl_sock *ys,
10771131
return NULL;
10781132
}
10791133

1134+
/* ============== NETDEV_CMD_BIND_RX ============== */
1135+
/* NETDEV_CMD_BIND_RX - do */
1136+
void netdev_bind_rx_req_free(struct netdev_bind_rx_req *req)
1137+
{
1138+
unsigned int i;
1139+
1140+
for (i = 0; i < req->n_queues; i++)
1141+
netdev_queue_id_free(&req->queues[i]);
1142+
free(req->queues);
1143+
free(req);
1144+
}
1145+
1146+
void netdev_bind_rx_rsp_free(struct netdev_bind_rx_rsp *rsp)
1147+
{
1148+
free(rsp);
1149+
}
1150+
1151+
int netdev_bind_rx_rsp_parse(const struct nlmsghdr *nlh,
1152+
struct ynl_parse_arg *yarg)
1153+
{
1154+
struct netdev_bind_rx_rsp *dst;
1155+
const struct nlattr *attr;
1156+
1157+
dst = yarg->data;
1158+
1159+
ynl_attr_for_each(attr, nlh, yarg->ys->family->hdr_len) {
1160+
unsigned int type = ynl_attr_type(attr);
1161+
1162+
if (type == NETDEV_A_DMABUF_ID) {
1163+
if (ynl_attr_validate(yarg, attr))
1164+
return YNL_PARSE_CB_ERROR;
1165+
dst->_present.id = 1;
1166+
dst->id = ynl_attr_get_u32(attr);
1167+
}
1168+
}
1169+
1170+
return YNL_PARSE_CB_OK;
1171+
}
1172+
1173+
struct netdev_bind_rx_rsp *
1174+
netdev_bind_rx(struct ynl_sock *ys, struct netdev_bind_rx_req *req)
1175+
{
1176+
struct ynl_req_state yrs = { .yarg = { .ys = ys, }, };
1177+
struct netdev_bind_rx_rsp *rsp;
1178+
struct nlmsghdr *nlh;
1179+
int err;
1180+
1181+
nlh = ynl_gemsg_start_req(ys, ys->family_id, NETDEV_CMD_BIND_RX, 1);
1182+
ys->req_policy = &netdev_dmabuf_nest;
1183+
yrs.yarg.rsp_policy = &netdev_dmabuf_nest;
1184+
1185+
if (req->_present.ifindex)
1186+
ynl_attr_put_u32(nlh, NETDEV_A_DMABUF_IFINDEX, req->ifindex);
1187+
if (req->_present.fd)
1188+
ynl_attr_put_u32(nlh, NETDEV_A_DMABUF_FD, req->fd);
1189+
for (unsigned int i = 0; i < req->n_queues; i++)
1190+
netdev_queue_id_put(nlh, NETDEV_A_DMABUF_QUEUES, &req->queues[i]);
1191+
1192+
rsp = calloc(1, sizeof(*rsp));
1193+
yrs.yarg.data = rsp;
1194+
yrs.cb = netdev_bind_rx_rsp_parse;
1195+
yrs.rsp_cmd = NETDEV_CMD_BIND_RX;
1196+
1197+
err = ynl_exec(ys, nlh, &yrs);
1198+
if (err < 0)
1199+
goto err_free;
1200+
1201+
return rsp;
1202+
1203+
err_free:
1204+
netdev_bind_rx_rsp_free(rsp);
1205+
return NULL;
1206+
}
1207+
10801208
static const struct ynl_ntf_info netdev_ntf_info[] = {
10811209
[NETDEV_CMD_DEV_ADD_NTF] = {
10821210
.alloc_sz = sizeof(struct netdev_dev_get_ntf),

‎include/linux/netdev.h

+13
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ enum {
9393
NETDEV_A_PAGE_POOL_INFLIGHT,
9494
NETDEV_A_PAGE_POOL_INFLIGHT_MEM,
9595
NETDEV_A_PAGE_POOL_DETACH_TIME,
96+
NETDEV_A_PAGE_POOL_DMABUF,
9697

9798
__NETDEV_A_PAGE_POOL_MAX,
9899
NETDEV_A_PAGE_POOL_MAX = (__NETDEV_A_PAGE_POOL_MAX - 1)
@@ -131,6 +132,7 @@ enum {
131132
NETDEV_A_QUEUE_IFINDEX,
132133
NETDEV_A_QUEUE_TYPE,
133134
NETDEV_A_QUEUE_NAPI_ID,
135+
NETDEV_A_QUEUE_DMABUF,
134136

135137
__NETDEV_A_QUEUE_MAX,
136138
NETDEV_A_QUEUE_MAX = (__NETDEV_A_QUEUE_MAX - 1)
@@ -173,6 +175,16 @@ enum {
173175
NETDEV_A_QSTATS_MAX = (__NETDEV_A_QSTATS_MAX - 1)
174176
};
175177

178+
enum {
179+
NETDEV_A_DMABUF_IFINDEX = 1,
180+
NETDEV_A_DMABUF_QUEUES,
181+
NETDEV_A_DMABUF_FD,
182+
NETDEV_A_DMABUF_ID,
183+
184+
__NETDEV_A_DMABUF_MAX,
185+
NETDEV_A_DMABUF_MAX = (__NETDEV_A_DMABUF_MAX - 1)
186+
};
187+
176188
enum {
177189
NETDEV_CMD_DEV_GET = 1,
178190
NETDEV_CMD_DEV_ADD_NTF,
@@ -186,6 +198,7 @@ enum {
186198
NETDEV_CMD_QUEUE_GET,
187199
NETDEV_CMD_NAPI_GET,
188200
NETDEV_CMD_QSTATS_GET,
201+
NETDEV_CMD_BIND_RX,
189202

190203
__NETDEV_CMD_MAX,
191204
NETDEV_CMD_MAX = (__NETDEV_CMD_MAX - 1)

‎include/ynl-c/mptcp_pm.h

+12-12
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ struct mptcp_pm_address {
3535
__u8 id;
3636
__u32 addr4 /* big-endian */;
3737
void *addr6;
38-
__u16 port /* big-endian */;
38+
__u16 port;
3939
__u32 flags;
4040
__s32 if_idx;
4141
};
@@ -91,7 +91,7 @@ mptcp_pm_add_addr_req_set_addr_addr6(struct mptcp_pm_add_addr_req *req,
9191
}
9292
static inline void
9393
mptcp_pm_add_addr_req_set_addr_port(struct mptcp_pm_add_addr_req *req,
94-
__u16 port /* big-endian */)
94+
__u16 port)
9595
{
9696
req->_present.addr = 1;
9797
req->addr._present.port = 1;
@@ -170,7 +170,7 @@ mptcp_pm_del_addr_req_set_addr_addr6(struct mptcp_pm_del_addr_req *req,
170170
}
171171
static inline void
172172
mptcp_pm_del_addr_req_set_addr_port(struct mptcp_pm_del_addr_req *req,
173-
__u16 port /* big-endian */)
173+
__u16 port)
174174
{
175175
req->_present.addr = 1;
176176
req->addr._present.port = 1;
@@ -251,7 +251,7 @@ mptcp_pm_get_addr_req_set_addr_addr6(struct mptcp_pm_get_addr_req *req,
251251
}
252252
static inline void
253253
mptcp_pm_get_addr_req_set_addr_port(struct mptcp_pm_get_addr_req *req,
254-
__u16 port /* big-endian */)
254+
__u16 port)
255255
{
256256
req->_present.addr = 1;
257257
req->addr._present.port = 1;
@@ -359,7 +359,7 @@ mptcp_pm_flush_addrs_req_set_addr_addr6(struct mptcp_pm_flush_addrs_req *req,
359359
}
360360
static inline void
361361
mptcp_pm_flush_addrs_req_set_addr_port(struct mptcp_pm_flush_addrs_req *req,
362-
__u16 port /* big-endian */)
362+
__u16 port)
363363
{
364364
req->_present.addr = 1;
365365
req->addr._present.port = 1;
@@ -535,7 +535,7 @@ mptcp_pm_set_flags_req_set_addr_addr6(struct mptcp_pm_set_flags_req *req,
535535
}
536536
static inline void
537537
mptcp_pm_set_flags_req_set_addr_port(struct mptcp_pm_set_flags_req *req,
538-
__u16 port /* big-endian */)
538+
__u16 port)
539539
{
540540
req->_present.addr = 1;
541541
req->addr._present.port = 1;
@@ -600,7 +600,7 @@ mptcp_pm_set_flags_req_set_addr_remote_addr6(struct mptcp_pm_set_flags_req *req,
600600
}
601601
static inline void
602602
mptcp_pm_set_flags_req_set_addr_remote_port(struct mptcp_pm_set_flags_req *req,
603-
__u16 port /* big-endian */)
603+
__u16 port)
604604
{
605605
req->_present.addr_remote = 1;
606606
req->addr_remote._present.port = 1;
@@ -681,7 +681,7 @@ mptcp_pm_announce_req_set_addr_addr6(struct mptcp_pm_announce_req *req,
681681
}
682682
static inline void
683683
mptcp_pm_announce_req_set_addr_port(struct mptcp_pm_announce_req *req,
684-
__u16 port /* big-endian */)
684+
__u16 port)
685685
{
686686
req->_present.addr = 1;
687687
req->addr._present.port = 1;
@@ -808,7 +808,7 @@ mptcp_pm_subflow_create_req_set_addr_addr6(struct mptcp_pm_subflow_create_req *r
808808
}
809809
static inline void
810810
mptcp_pm_subflow_create_req_set_addr_port(struct mptcp_pm_subflow_create_req *req,
811-
__u16 port /* big-endian */)
811+
__u16 port)
812812
{
813813
req->_present.addr = 1;
814814
req->addr._present.port = 1;
@@ -874,7 +874,7 @@ mptcp_pm_subflow_create_req_set_addr_remote_addr6(struct mptcp_pm_subflow_create
874874
}
875875
static inline void
876876
mptcp_pm_subflow_create_req_set_addr_remote_port(struct mptcp_pm_subflow_create_req *req,
877-
__u16 port /* big-endian */)
877+
__u16 port)
878878
{
879879
req->_present.addr_remote = 1;
880880
req->addr_remote._present.port = 1;
@@ -961,7 +961,7 @@ mptcp_pm_subflow_destroy_req_set_addr_addr6(struct mptcp_pm_subflow_destroy_req
961961
}
962962
static inline void
963963
mptcp_pm_subflow_destroy_req_set_addr_port(struct mptcp_pm_subflow_destroy_req *req,
964-
__u16 port /* big-endian */)
964+
__u16 port)
965965
{
966966
req->_present.addr = 1;
967967
req->addr._present.port = 1;
@@ -1027,7 +1027,7 @@ mptcp_pm_subflow_destroy_req_set_addr_remote_addr6(struct mptcp_pm_subflow_destr
10271027
}
10281028
static inline void
10291029
mptcp_pm_subflow_destroy_req_set_addr_remote_port(struct mptcp_pm_subflow_destroy_req *req,
1030-
__u16 port /* big-endian */)
1030+
__u16 port)
10311031
{
10321032
req->_present.addr_remote = 1;
10331033
req->addr_remote._present.port = 1;

‎include/ynl-c/netdev.h

+72
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,16 @@ struct netdev_page_pool_info {
3434
__u32 ifindex;
3535
};
3636

37+
struct netdev_queue_id {
38+
struct {
39+
__u32 id:1;
40+
__u32 type:1;
41+
} _present;
42+
43+
__u32 id;
44+
enum netdev_queue_type type;
45+
};
46+
3747
/* ============== NETDEV_CMD_DEV_GET ============== */
3848
/* NETDEV_CMD_DEV_GET - do */
3949
struct netdev_dev_get_req {
@@ -134,6 +144,7 @@ struct netdev_page_pool_get_rsp {
134144
__u32 inflight:1;
135145
__u32 inflight_mem:1;
136146
__u32 detach_time:1;
147+
__u32 dmabuf:1;
137148
} _present;
138149

139150
__u64 id;
@@ -142,6 +153,7 @@ struct netdev_page_pool_get_rsp {
142153
__u64 inflight;
143154
__u64 inflight_mem;
144155
__u64 detach_time;
156+
__u32 dmabuf;
145157
};
146158

147159
void netdev_page_pool_get_rsp_free(struct netdev_page_pool_get_rsp *rsp);
@@ -310,12 +322,14 @@ struct netdev_queue_get_rsp {
310322
__u32 type:1;
311323
__u32 napi_id:1;
312324
__u32 ifindex:1;
325+
__u32 dmabuf:1;
313326
} _present;
314327

315328
__u32 id;
316329
enum netdev_queue_type type;
317330
__u32 napi_id;
318331
__u32 ifindex;
332+
__u32 dmabuf;
319333
};
320334

321335
void netdev_queue_get_rsp_free(struct netdev_queue_get_rsp *rsp);
@@ -505,4 +519,62 @@ struct netdev_qstats_get_rsp_list *
505519
netdev_qstats_get_dump(struct ynl_sock *ys,
506520
struct netdev_qstats_get_req_dump *req);
507521

522+
/* ============== NETDEV_CMD_BIND_RX ============== */
523+
/* NETDEV_CMD_BIND_RX - do */
524+
struct netdev_bind_rx_req {
525+
struct {
526+
__u32 ifindex:1;
527+
__u32 fd:1;
528+
} _present;
529+
530+
__u32 ifindex;
531+
__u32 fd;
532+
unsigned int n_queues;
533+
struct netdev_queue_id *queues;
534+
};
535+
536+
static inline struct netdev_bind_rx_req *netdev_bind_rx_req_alloc(void)
537+
{
538+
return calloc(1, sizeof(struct netdev_bind_rx_req));
539+
}
540+
void netdev_bind_rx_req_free(struct netdev_bind_rx_req *req);
541+
542+
static inline void
543+
netdev_bind_rx_req_set_ifindex(struct netdev_bind_rx_req *req, __u32 ifindex)
544+
{
545+
req->_present.ifindex = 1;
546+
req->ifindex = ifindex;
547+
}
548+
static inline void
549+
netdev_bind_rx_req_set_fd(struct netdev_bind_rx_req *req, __u32 fd)
550+
{
551+
req->_present.fd = 1;
552+
req->fd = fd;
553+
}
554+
static inline void
555+
__netdev_bind_rx_req_set_queues(struct netdev_bind_rx_req *req,
556+
struct netdev_queue_id *queues,
557+
unsigned int n_queues)
558+
{
559+
free(req->queues);
560+
req->queues = queues;
561+
req->n_queues = n_queues;
562+
}
563+
564+
struct netdev_bind_rx_rsp {
565+
struct {
566+
__u32 id:1;
567+
} _present;
568+
569+
__u32 id;
570+
};
571+
572+
void netdev_bind_rx_rsp_free(struct netdev_bind_rx_rsp *rsp);
573+
574+
/*
575+
* Bind dmabuf to netdev
576+
*/
577+
struct netdev_bind_rx_rsp *
578+
netdev_bind_rx(struct ynl_sock *ys, struct netdev_bind_rx_req *req);
579+
508580
#endif /* _LINUX_NETDEV_GEN_H */

0 commit comments

Comments
 (0)
Please sign in to comment.