* [PATCH 22.11] net/tap: fix build with LTO
@ 2025-10-29 14:27 David Marchand
2025-12-30 10:04 ` Shani Peretz
0 siblings, 1 reply; 2+ messages in thread
From: David Marchand @ 2025-10-29 14:27 UTC (permalink / raw)
To: stable; +Cc: luca.boccassi, Stephen Hemminger
[ upstream commit adb95cc6644103d055609f5bcae5df91afea02ab ]
The compiler has trouble understanding that the code is actually pointing
at the data in the message past the nh struct.
Update the tap_nlattr_add* helpers and the NLMSG_TAIL macro passing a
pointer to msg.
Bugzilla ID: 1511
Fixes: 7c25284e30c2 ("net/tap: add netlink back-end for flow API")
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/tap/tap_flow.c | 124 +++++++++++++---------------------
drivers/net/tap/tap_netlink.c | 24 +++----
drivers/net/tap/tap_netlink.h | 10 +--
drivers/net/tap/tap_tcmsgs.c | 6 +-
4 files changed, 68 insertions(+), 96 deletions(-)
diff --git a/drivers/net/tap/tap_flow.c b/drivers/net/tap/tap_flow.c
index ea23841f60..f03dddbbba 100644
--- a/drivers/net/tap/tap_flow.c
+++ b/drivers/net/tap/tap_flow.c
@@ -535,20 +535,16 @@ tap_flow_create_eth(const struct rte_flow_item *item, void *data)
return 0;
msg = &flow->msg;
if (!rte_is_zero_ether_addr(&mask->dst)) {
- tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_ETH_DST,
- RTE_ETHER_ADDR_LEN,
- &spec->dst.addr_bytes);
- tap_nlattr_add(&msg->nh,
- TCA_FLOWER_KEY_ETH_DST_MASK, RTE_ETHER_ADDR_LEN,
- &mask->dst.addr_bytes);
+ tap_nlattr_add(msg, TCA_FLOWER_KEY_ETH_DST, RTE_ETHER_ADDR_LEN,
+ &spec->dst.addr_bytes);
+ tap_nlattr_add(msg, TCA_FLOWER_KEY_ETH_DST_MASK, RTE_ETHER_ADDR_LEN,
+ &mask->dst.addr_bytes);
}
if (!rte_is_zero_ether_addr(&mask->src)) {
- tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_ETH_SRC,
- RTE_ETHER_ADDR_LEN,
+ tap_nlattr_add(msg, TCA_FLOWER_KEY_ETH_SRC, RTE_ETHER_ADDR_LEN,
&spec->src.addr_bytes);
- tap_nlattr_add(&msg->nh,
- TCA_FLOWER_KEY_ETH_SRC_MASK, RTE_ETHER_ADDR_LEN,
- &mask->src.addr_bytes);
+ tap_nlattr_add(msg, TCA_FLOWER_KEY_ETH_SRC_MASK, RTE_ETHER_ADDR_LEN,
+ &mask->src.addr_bytes);
}
return 0;
}
@@ -604,11 +600,9 @@ tap_flow_create_vlan(const struct rte_flow_item *item, void *data)
uint8_t vid = VLAN_ID(tci);
if (prio)
- tap_nlattr_add8(&msg->nh,
- TCA_FLOWER_KEY_VLAN_PRIO, prio);
+ tap_nlattr_add8(msg, TCA_FLOWER_KEY_VLAN_PRIO, prio);
if (vid)
- tap_nlattr_add16(&msg->nh,
- TCA_FLOWER_KEY_VLAN_ID, vid);
+ tap_nlattr_add16(msg, TCA_FLOWER_KEY_VLAN_ID, vid);
}
return 0;
}
@@ -651,20 +645,15 @@ tap_flow_create_ipv4(const struct rte_flow_item *item, void *data)
if (!spec)
return 0;
if (mask->hdr.dst_addr) {
- tap_nlattr_add32(&msg->nh, TCA_FLOWER_KEY_IPV4_DST,
- spec->hdr.dst_addr);
- tap_nlattr_add32(&msg->nh, TCA_FLOWER_KEY_IPV4_DST_MASK,
- mask->hdr.dst_addr);
+ tap_nlattr_add32(msg, TCA_FLOWER_KEY_IPV4_DST, spec->hdr.dst_addr);
+ tap_nlattr_add32(msg, TCA_FLOWER_KEY_IPV4_DST_MASK, mask->hdr.dst_addr);
}
if (mask->hdr.src_addr) {
- tap_nlattr_add32(&msg->nh, TCA_FLOWER_KEY_IPV4_SRC,
- spec->hdr.src_addr);
- tap_nlattr_add32(&msg->nh, TCA_FLOWER_KEY_IPV4_SRC_MASK,
- mask->hdr.src_addr);
+ tap_nlattr_add32(msg, TCA_FLOWER_KEY_IPV4_SRC, spec->hdr.src_addr);
+ tap_nlattr_add32(msg, TCA_FLOWER_KEY_IPV4_SRC_MASK, mask->hdr.src_addr);
}
if (spec->hdr.next_proto_id)
- tap_nlattr_add8(&msg->nh, TCA_FLOWER_KEY_IP_PROTO,
- spec->hdr.next_proto_id);
+ tap_nlattr_add8(msg, TCA_FLOWER_KEY_IP_PROTO, spec->hdr.next_proto_id);
return 0;
}
@@ -707,20 +696,19 @@ tap_flow_create_ipv6(const struct rte_flow_item *item, void *data)
if (!spec)
return 0;
if (memcmp(mask->hdr.dst_addr, empty_addr, 16)) {
- tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_IPV6_DST,
- sizeof(spec->hdr.dst_addr), &spec->hdr.dst_addr);
- tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_IPV6_DST_MASK,
- sizeof(mask->hdr.dst_addr), &mask->hdr.dst_addr);
+ tap_nlattr_add(msg, TCA_FLOWER_KEY_IPV6_DST, sizeof(spec->hdr.dst_addr),
+ &spec->hdr.dst_addr);
+ tap_nlattr_add(msg, TCA_FLOWER_KEY_IPV6_DST_MASK, sizeof(mask->hdr.dst_addr),
+ &mask->hdr.dst_addr);
}
if (memcmp(mask->hdr.src_addr, empty_addr, 16)) {
- tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_IPV6_SRC,
- sizeof(spec->hdr.src_addr), &spec->hdr.src_addr);
- tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_IPV6_SRC_MASK,
- sizeof(mask->hdr.src_addr), &mask->hdr.src_addr);
+ tap_nlattr_add(msg, TCA_FLOWER_KEY_IPV6_SRC, sizeof(spec->hdr.src_addr),
+ &spec->hdr.src_addr);
+ tap_nlattr_add(msg, TCA_FLOWER_KEY_IPV6_SRC_MASK, sizeof(mask->hdr.src_addr),
+ &mask->hdr.src_addr);
}
if (spec->hdr.proto)
- tap_nlattr_add8(&msg->nh,
- TCA_FLOWER_KEY_IP_PROTO, spec->hdr.proto);
+ tap_nlattr_add8(msg, TCA_FLOWER_KEY_IP_PROTO, spec->hdr.proto);
return 0;
}
@@ -758,15 +746,13 @@ tap_flow_create_udp(const struct rte_flow_item *item, void *data)
if (!flow)
return 0;
msg = &flow->msg;
- tap_nlattr_add8(&msg->nh, TCA_FLOWER_KEY_IP_PROTO, IPPROTO_UDP);
+ tap_nlattr_add8(msg, TCA_FLOWER_KEY_IP_PROTO, IPPROTO_UDP);
if (!spec)
return 0;
if (mask->hdr.dst_port)
- tap_nlattr_add16(&msg->nh, TCA_FLOWER_KEY_UDP_DST,
- spec->hdr.dst_port);
+ tap_nlattr_add16(msg, TCA_FLOWER_KEY_UDP_DST, spec->hdr.dst_port);
if (mask->hdr.src_port)
- tap_nlattr_add16(&msg->nh, TCA_FLOWER_KEY_UDP_SRC,
- spec->hdr.src_port);
+ tap_nlattr_add16(msg, TCA_FLOWER_KEY_UDP_SRC, spec->hdr.src_port);
return 0;
}
@@ -804,15 +790,13 @@ tap_flow_create_tcp(const struct rte_flow_item *item, void *data)
if (!flow)
return 0;
msg = &flow->msg;
- tap_nlattr_add8(&msg->nh, TCA_FLOWER_KEY_IP_PROTO, IPPROTO_TCP);
+ tap_nlattr_add8(msg, TCA_FLOWER_KEY_IP_PROTO, IPPROTO_TCP);
if (!spec)
return 0;
if (mask->hdr.dst_port)
- tap_nlattr_add16(&msg->nh, TCA_FLOWER_KEY_TCP_DST,
- spec->hdr.dst_port);
+ tap_nlattr_add16(msg, TCA_FLOWER_KEY_TCP_DST, spec->hdr.dst_port);
if (mask->hdr.src_port)
- tap_nlattr_add16(&msg->nh, TCA_FLOWER_KEY_TCP_SRC,
- spec->hdr.src_port);
+ tap_nlattr_add16(msg, TCA_FLOWER_KEY_TCP_SRC, spec->hdr.src_port);
return 0;
}
@@ -920,35 +904,27 @@ add_action(struct rte_flow *flow, size_t *act_index, struct action_data *adata)
if (tap_nlattr_nested_start(msg, (*act_index)++) < 0)
return -1;
- tap_nlattr_add(&msg->nh, TCA_ACT_KIND,
- strlen(adata->id) + 1, adata->id);
+ tap_nlattr_add(msg, TCA_ACT_KIND, strlen(adata->id) + 1, adata->id);
if (tap_nlattr_nested_start(msg, TCA_ACT_OPTIONS) < 0)
return -1;
if (strcmp("gact", adata->id) == 0) {
- tap_nlattr_add(&msg->nh, TCA_GACT_PARMS, sizeof(adata->gact),
- &adata->gact);
+ tap_nlattr_add(msg, TCA_GACT_PARMS, sizeof(adata->gact), &adata->gact);
} else if (strcmp("mirred", adata->id) == 0) {
if (adata->mirred.eaction == TCA_EGRESS_MIRROR)
adata->mirred.action = TC_ACT_PIPE;
else /* REDIRECT */
adata->mirred.action = TC_ACT_STOLEN;
- tap_nlattr_add(&msg->nh, TCA_MIRRED_PARMS,
- sizeof(adata->mirred),
- &adata->mirred);
+ tap_nlattr_add(msg, TCA_MIRRED_PARMS, sizeof(adata->mirred), &adata->mirred);
} else if (strcmp("skbedit", adata->id) == 0) {
- tap_nlattr_add(&msg->nh, TCA_SKBEDIT_PARMS,
- sizeof(adata->skbedit.skbedit),
- &adata->skbedit.skbedit);
- tap_nlattr_add16(&msg->nh, TCA_SKBEDIT_QUEUE_MAPPING,
- adata->skbedit.queue);
+ tap_nlattr_add(msg, TCA_SKBEDIT_PARMS, sizeof(adata->skbedit.skbedit),
+ &adata->skbedit.skbedit);
+ tap_nlattr_add16(msg, TCA_SKBEDIT_QUEUE_MAPPING, adata->skbedit.queue);
} else if (strcmp("bpf", adata->id) == 0) {
- tap_nlattr_add32(&msg->nh, TCA_ACT_BPF_FD, adata->bpf.bpf_fd);
- tap_nlattr_add(&msg->nh, TCA_ACT_BPF_NAME,
- strlen(adata->bpf.annotation) + 1,
- adata->bpf.annotation);
- tap_nlattr_add(&msg->nh, TCA_ACT_BPF_PARMS,
- sizeof(adata->bpf.bpf),
- &adata->bpf.bpf);
+ tap_nlattr_add32(msg, TCA_ACT_BPF_FD, adata->bpf.bpf_fd);
+ tap_nlattr_add(msg, TCA_ACT_BPF_NAME, strlen(adata->bpf.annotation) + 1,
+ adata->bpf.annotation);
+ tap_nlattr_add(msg, TCA_ACT_BPF_PARMS, sizeof(adata->bpf.bpf),
+ &adata->bpf.bpf);
} else {
return -1;
}
@@ -1078,7 +1054,7 @@ priv_flow_process(struct pmd_internals *pmd,
TC_H_MAKE(MULTIQ_MAJOR_HANDLE, 0);
}
/* use flower filter type */
- tap_nlattr_add(&flow->msg.nh, TCA_KIND, sizeof("flower"), "flower");
+ tap_nlattr_add(&flow->msg, TCA_KIND, sizeof("flower"), "flower");
if (tap_nlattr_nested_start(&flow->msg, TCA_OPTIONS) < 0) {
rte_flow_error_set(error, ENOMEM, RTE_FLOW_ERROR_TYPE_ACTION,
actions, "could not allocated netlink msg");
@@ -1118,15 +1094,11 @@ priv_flow_process(struct pmd_internals *pmd,
}
if (flow) {
if (data.vlan) {
- tap_nlattr_add16(&flow->msg.nh, TCA_FLOWER_KEY_ETH_TYPE,
- htons(ETH_P_8021Q));
- tap_nlattr_add16(&flow->msg.nh,
- TCA_FLOWER_KEY_VLAN_ETH_TYPE,
- data.eth_type ?
- data.eth_type : htons(ETH_P_ALL));
+ tap_nlattr_add16(&flow->msg, TCA_FLOWER_KEY_ETH_TYPE, htons(ETH_P_8021Q));
+ tap_nlattr_add16(&flow->msg, TCA_FLOWER_KEY_VLAN_ETH_TYPE,
+ data.eth_type ? data.eth_type : htons(ETH_P_ALL));
} else if (data.eth_type) {
- tap_nlattr_add16(&flow->msg.nh, TCA_FLOWER_KEY_ETH_TYPE,
- data.eth_type);
+ tap_nlattr_add16(&flow->msg, TCA_FLOWER_KEY_ETH_TYPE, data.eth_type);
}
}
if (mirred && flow) {
@@ -1919,13 +1891,13 @@ static int rss_enable(struct pmd_internals *pmd,
msg->t.tcm_info = TC_H_MAKE(prio << 16, msg->t.tcm_info);
msg->t.tcm_parent = TC_H_MAKE(MULTIQ_MAJOR_HANDLE, 0);
- tap_nlattr_add(&msg->nh, TCA_KIND, sizeof("bpf"), "bpf");
+ tap_nlattr_add(msg, TCA_KIND, sizeof("bpf"), "bpf");
if (tap_nlattr_nested_start(msg, TCA_OPTIONS) < 0)
return -1;
- tap_nlattr_add32(&msg->nh, TCA_BPF_FD, pmd->bpf_fd[i]);
+ tap_nlattr_add32(msg, TCA_BPF_FD, pmd->bpf_fd[i]);
snprintf(annotation, sizeof(annotation), "[%s%d]",
SEC_NAME_CLS_Q, i);
- tap_nlattr_add(&msg->nh, TCA_BPF_NAME, strlen(annotation) + 1,
+ tap_nlattr_add(msg, TCA_BPF_NAME, strlen(annotation) + 1,
annotation);
/* Actions */
{
diff --git a/drivers/net/tap/tap_netlink.c b/drivers/net/tap/tap_netlink.c
index 35c491ac37..1d8b61e5ab 100644
--- a/drivers/net/tap/tap_netlink.c
+++ b/drivers/net/tap/tap_netlink.c
@@ -293,18 +293,18 @@ tap_nl_recv(int nlsk_fd, int (*cb)(struct nlmsghdr *, void *arg), void *arg)
* The data to append.
*/
void
-tap_nlattr_add(struct nlmsghdr *nh, unsigned short type,
+tap_nlattr_add(struct nlmsg *msg, unsigned short type,
unsigned int data_len, const void *data)
{
/* see man 3 rtnetlink */
struct rtattr *rta;
- rta = (struct rtattr *)NLMSG_TAIL(nh);
+ rta = (struct rtattr *)NLMSG_TAIL(msg);
rta->rta_len = RTA_LENGTH(data_len);
rta->rta_type = type;
if (data_len > 0)
memcpy(RTA_DATA(rta), data, data_len);
- nh->nlmsg_len = NLMSG_ALIGN(nh->nlmsg_len) + RTA_ALIGN(rta->rta_len);
+ msg->nh.nlmsg_len = NLMSG_ALIGN(msg->nh.nlmsg_len) + RTA_ALIGN(rta->rta_len);
}
/**
@@ -318,9 +318,9 @@ tap_nlattr_add(struct nlmsghdr *nh, unsigned short type,
* The data to append.
*/
void
-tap_nlattr_add8(struct nlmsghdr *nh, unsigned short type, uint8_t data)
+tap_nlattr_add8(struct nlmsg *msg, unsigned short type, uint8_t data)
{
- tap_nlattr_add(nh, type, sizeof(uint8_t), &data);
+ tap_nlattr_add(msg, type, sizeof(uint8_t), &data);
}
/**
@@ -334,9 +334,9 @@ tap_nlattr_add8(struct nlmsghdr *nh, unsigned short type, uint8_t data)
* The data to append.
*/
void
-tap_nlattr_add16(struct nlmsghdr *nh, unsigned short type, uint16_t data)
+tap_nlattr_add16(struct nlmsg *msg, unsigned short type, uint16_t data)
{
- tap_nlattr_add(nh, type, sizeof(uint16_t), &data);
+ tap_nlattr_add(msg, type, sizeof(uint16_t), &data);
}
/**
@@ -350,9 +350,9 @@ tap_nlattr_add16(struct nlmsghdr *nh, unsigned short type, uint16_t data)
* The data to append.
*/
void
-tap_nlattr_add32(struct nlmsghdr *nh, unsigned short type, uint32_t data)
+tap_nlattr_add32(struct nlmsg *msg, unsigned short type, uint32_t data)
{
- tap_nlattr_add(nh, type, sizeof(uint32_t), &data);
+ tap_nlattr_add(msg, type, sizeof(uint32_t), &data);
}
/**
@@ -379,9 +379,9 @@ tap_nlattr_nested_start(struct nlmsg *msg, uint16_t type)
return -1;
}
- tail->tail = (struct rtattr *)NLMSG_TAIL(&msg->nh);
+ tail->tail = (struct rtattr *)NLMSG_TAIL(msg);
- tap_nlattr_add(&msg->nh, type, 0, NULL);
+ tap_nlattr_add(msg, type, 0, NULL);
tail->prev = msg->nested_tails;
@@ -404,7 +404,7 @@ tap_nlattr_nested_finish(struct nlmsg *msg)
{
struct nested_tail *tail = msg->nested_tails;
- tail->tail->rta_len = (char *)NLMSG_TAIL(&msg->nh) - (char *)tail->tail;
+ tail->tail->rta_len = (char *)NLMSG_TAIL(msg) - (char *)tail->tail;
if (tail->prev)
msg->nested_tails = tail->prev;
diff --git a/drivers/net/tap/tap_netlink.h b/drivers/net/tap/tap_netlink.h
index faa73ba163..c1493b6bf0 100644
--- a/drivers/net/tap/tap_netlink.h
+++ b/drivers/net/tap/tap_netlink.h
@@ -23,7 +23,7 @@ struct nlmsg {
struct nested_tail *nested_tails;
};
-#define NLMSG_TAIL(nlh) (void *)((char *)(nlh) + NLMSG_ALIGN((nlh)->nlmsg_len))
+#define NLMSG_TAIL(msg) (void *)((char *)(msg) + NLMSG_ALIGN((msg)->nh.nlmsg_len))
int tap_nl_init(uint32_t nl_groups);
int tap_nl_final(int nlsk_fd);
@@ -31,11 +31,11 @@ int tap_nl_send(int nlsk_fd, struct nlmsghdr *nh);
int tap_nl_recv(int nlsk_fd, int (*callback)(struct nlmsghdr *, void *),
void *arg);
int tap_nl_recv_ack(int nlsk_fd);
-void tap_nlattr_add(struct nlmsghdr *nh, unsigned short type,
+void tap_nlattr_add(struct nlmsg *msg, unsigned short type,
unsigned int data_len, const void *data);
-void tap_nlattr_add8(struct nlmsghdr *nh, unsigned short type, uint8_t data);
-void tap_nlattr_add16(struct nlmsghdr *nh, unsigned short type, uint16_t data);
-void tap_nlattr_add32(struct nlmsghdr *nh, unsigned short type, uint32_t data);
+void tap_nlattr_add8(struct nlmsg *msg, unsigned short type, uint8_t data);
+void tap_nlattr_add16(struct nlmsg *msg, unsigned short type, uint16_t data);
+void tap_nlattr_add32(struct nlmsg *msg, unsigned short type, uint32_t data);
int tap_nlattr_nested_start(struct nlmsg *msg, uint16_t type);
void tap_nlattr_nested_finish(struct nlmsg *msg);
diff --git a/drivers/net/tap/tap_tcmsgs.c b/drivers/net/tap/tap_tcmsgs.c
index 24a0423a0e..f811deef24 100644
--- a/drivers/net/tap/tap_tcmsgs.c
+++ b/drivers/net/tap/tap_tcmsgs.c
@@ -123,8 +123,8 @@ qdisc_add_multiq(int nlsk_fd, unsigned int ifindex)
NLM_F_REQUEST | NLM_F_ACK | NLM_F_EXCL | NLM_F_CREATE);
msg.t.tcm_handle = TC_H_MAKE(MULTIQ_MAJOR_HANDLE, 0);
msg.t.tcm_parent = TC_H_ROOT;
- tap_nlattr_add(&msg.nh, TCA_KIND, sizeof("multiq"), "multiq");
- tap_nlattr_add(&msg.nh, TCA_OPTIONS, sizeof(opt), &opt);
+ tap_nlattr_add(&msg, TCA_KIND, sizeof("multiq"), "multiq");
+ tap_nlattr_add(&msg, TCA_OPTIONS, sizeof(opt), &opt);
if (tap_nl_send(nlsk_fd, &msg.nh) < 0)
return -1;
if (tap_nl_recv_ack(nlsk_fd) < 0)
@@ -152,7 +152,7 @@ qdisc_add_ingress(int nlsk_fd, unsigned int ifindex)
NLM_F_REQUEST | NLM_F_ACK | NLM_F_EXCL | NLM_F_CREATE);
msg.t.tcm_handle = TC_H_MAKE(TC_H_INGRESS, 0);
msg.t.tcm_parent = TC_H_INGRESS;
- tap_nlattr_add(&msg.nh, TCA_KIND, sizeof("ingress"), "ingress");
+ tap_nlattr_add(&msg, TCA_KIND, sizeof("ingress"), "ingress");
if (tap_nl_send(nlsk_fd, &msg.nh) < 0)
return -1;
if (tap_nl_recv_ack(nlsk_fd) < 0)
--
2.51.0
^ permalink raw reply [flat|nested] 2+ messages in thread* RE: [PATCH 22.11] net/tap: fix build with LTO
2025-10-29 14:27 [PATCH 22.11] net/tap: fix build with LTO David Marchand
@ 2025-12-30 10:04 ` Shani Peretz
0 siblings, 0 replies; 2+ messages in thread
From: Shani Peretz @ 2025-12-30 10:04 UTC (permalink / raw)
To: David Marchand, stable; +Cc: luca.boccassi, Stephen Hemminger
> -----Original Message-----
> From: David Marchand <david.marchand@redhat.com>
> Sent: Wednesday, 29 October 2025 16:28
> To: stable@dpdk.org
> Cc: luca.boccassi@gmail.com; Stephen Hemminger
> <stephen@networkplumber.org>
> Subject: [PATCH 22.11] net/tap: fix build with LTO
>
> External email: Use caution opening links or attachments
>
>
> [ upstream commit adb95cc6644103d055609f5bcae5df91afea02ab ]
>
> The compiler has trouble understanding that the code is actually pointing at the
> data in the message past the nh struct.
>
> Update the tap_nlattr_add* helpers and the NLMSG_TAIL macro passing a
> pointer to msg.
>
> Bugzilla ID: 1511
> Fixes: 7c25284e30c2 ("net/tap: add netlink back-end for flow API")
>
> Signed-off-by: David Marchand <david.marchand@redhat.com>
> Acked-by: Stephen Hemminger <stephen@networkplumber.org>
> ---
> drivers/net/tap/tap_flow.c | 124 +++++++++++++---------------------
> drivers/net/tap/tap_netlink.c | 24 +++---- drivers/net/tap/tap_netlink.h | 10
> +--
> drivers/net/tap/tap_tcmsgs.c | 6 +-
> 4 files changed, 68 insertions(+), 96 deletions(-)
>
> diff --git a/drivers/net/tap/tap_flow.c b/drivers/net/tap/tap_flow.c index
> ea23841f60..f03dddbbba 100644
> --- a/drivers/net/tap/tap_flow.c
> +++ b/drivers/net/tap/tap_flow.c
> @@ -535,20 +535,16 @@ tap_flow_create_eth(const struct rte_flow_item
> *item, void *data)
> return 0;
> msg = &flow->msg;
> if (!rte_is_zero_ether_addr(&mask->dst)) {
> - tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_ETH_DST,
> - RTE_ETHER_ADDR_LEN,
> - &spec->dst.addr_bytes);
> - tap_nlattr_add(&msg->nh,
> - TCA_FLOWER_KEY_ETH_DST_MASK, RTE_ETHER_ADDR_LEN,
> - &mask->dst.addr_bytes);
> + tap_nlattr_add(msg, TCA_FLOWER_KEY_ETH_DST,
> RTE_ETHER_ADDR_LEN,
> + &spec->dst.addr_bytes);
> + tap_nlattr_add(msg, TCA_FLOWER_KEY_ETH_DST_MASK,
> RTE_ETHER_ADDR_LEN,
> + &mask->dst.addr_bytes);
> }
> if (!rte_is_zero_ether_addr(&mask->src)) {
> - tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_ETH_SRC,
> - RTE_ETHER_ADDR_LEN,
> + tap_nlattr_add(msg, TCA_FLOWER_KEY_ETH_SRC,
> + RTE_ETHER_ADDR_LEN,
> &spec->src.addr_bytes);
> - tap_nlattr_add(&msg->nh,
> - TCA_FLOWER_KEY_ETH_SRC_MASK, RTE_ETHER_ADDR_LEN,
> - &mask->src.addr_bytes);
> + tap_nlattr_add(msg, TCA_FLOWER_KEY_ETH_SRC_MASK,
> RTE_ETHER_ADDR_LEN,
> + &mask->src.addr_bytes);
> }
> return 0;
> }
> @@ -604,11 +600,9 @@ tap_flow_create_vlan(const struct rte_flow_item
> *item, void *data)
> uint8_t vid = VLAN_ID(tci);
>
> if (prio)
> - tap_nlattr_add8(&msg->nh,
> - TCA_FLOWER_KEY_VLAN_PRIO, prio);
> + tap_nlattr_add8(msg, TCA_FLOWER_KEY_VLAN_PRIO,
> + prio);
> if (vid)
> - tap_nlattr_add16(&msg->nh,
> - TCA_FLOWER_KEY_VLAN_ID, vid);
> + tap_nlattr_add16(msg, TCA_FLOWER_KEY_VLAN_ID,
> + vid);
> }
> return 0;
> }
> @@ -651,20 +645,15 @@ tap_flow_create_ipv4(const struct rte_flow_item
> *item, void *data)
> if (!spec)
> return 0;
> if (mask->hdr.dst_addr) {
> - tap_nlattr_add32(&msg->nh, TCA_FLOWER_KEY_IPV4_DST,
> - spec->hdr.dst_addr);
> - tap_nlattr_add32(&msg->nh, TCA_FLOWER_KEY_IPV4_DST_MASK,
> - mask->hdr.dst_addr);
> + tap_nlattr_add32(msg, TCA_FLOWER_KEY_IPV4_DST, spec-
> >hdr.dst_addr);
> + tap_nlattr_add32(msg, TCA_FLOWER_KEY_IPV4_DST_MASK,
> + mask->hdr.dst_addr);
> }
> if (mask->hdr.src_addr) {
> - tap_nlattr_add32(&msg->nh, TCA_FLOWER_KEY_IPV4_SRC,
> - spec->hdr.src_addr);
> - tap_nlattr_add32(&msg->nh, TCA_FLOWER_KEY_IPV4_SRC_MASK,
> - mask->hdr.src_addr);
> + tap_nlattr_add32(msg, TCA_FLOWER_KEY_IPV4_SRC, spec-
> >hdr.src_addr);
> + tap_nlattr_add32(msg, TCA_FLOWER_KEY_IPV4_SRC_MASK,
> + mask->hdr.src_addr);
> }
> if (spec->hdr.next_proto_id)
> - tap_nlattr_add8(&msg->nh, TCA_FLOWER_KEY_IP_PROTO,
> - spec->hdr.next_proto_id);
> + tap_nlattr_add8(msg, TCA_FLOWER_KEY_IP_PROTO,
> + spec->hdr.next_proto_id);
> return 0;
> }
>
> @@ -707,20 +696,19 @@ tap_flow_create_ipv6(const struct rte_flow_item
> *item, void *data)
> if (!spec)
> return 0;
> if (memcmp(mask->hdr.dst_addr, empty_addr, 16)) {
> - tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_IPV6_DST,
> - sizeof(spec->hdr.dst_addr), &spec->hdr.dst_addr);
> - tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_IPV6_DST_MASK,
> - sizeof(mask->hdr.dst_addr), &mask->hdr.dst_addr);
> + tap_nlattr_add(msg, TCA_FLOWER_KEY_IPV6_DST, sizeof(spec-
> >hdr.dst_addr),
> + &spec->hdr.dst_addr);
> + tap_nlattr_add(msg, TCA_FLOWER_KEY_IPV6_DST_MASK,
> sizeof(mask->hdr.dst_addr),
> + &mask->hdr.dst_addr);
> }
> if (memcmp(mask->hdr.src_addr, empty_addr, 16)) {
> - tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_IPV6_SRC,
> - sizeof(spec->hdr.src_addr), &spec->hdr.src_addr);
> - tap_nlattr_add(&msg->nh, TCA_FLOWER_KEY_IPV6_SRC_MASK,
> - sizeof(mask->hdr.src_addr), &mask->hdr.src_addr);
> + tap_nlattr_add(msg, TCA_FLOWER_KEY_IPV6_SRC, sizeof(spec-
> >hdr.src_addr),
> + &spec->hdr.src_addr);
> + tap_nlattr_add(msg, TCA_FLOWER_KEY_IPV6_SRC_MASK,
> sizeof(mask->hdr.src_addr),
> + &mask->hdr.src_addr);
> }
> if (spec->hdr.proto)
> - tap_nlattr_add8(&msg->nh,
> - TCA_FLOWER_KEY_IP_PROTO, spec->hdr.proto);
> + tap_nlattr_add8(msg, TCA_FLOWER_KEY_IP_PROTO,
> + spec->hdr.proto);
> return 0;
> }
>
> @@ -758,15 +746,13 @@ tap_flow_create_udp(const struct rte_flow_item
> *item, void *data)
> if (!flow)
> return 0;
> msg = &flow->msg;
> - tap_nlattr_add8(&msg->nh, TCA_FLOWER_KEY_IP_PROTO, IPPROTO_UDP);
> + tap_nlattr_add8(msg, TCA_FLOWER_KEY_IP_PROTO, IPPROTO_UDP);
> if (!spec)
> return 0;
> if (mask->hdr.dst_port)
> - tap_nlattr_add16(&msg->nh, TCA_FLOWER_KEY_UDP_DST,
> - spec->hdr.dst_port);
> + tap_nlattr_add16(msg, TCA_FLOWER_KEY_UDP_DST,
> + spec->hdr.dst_port);
> if (mask->hdr.src_port)
> - tap_nlattr_add16(&msg->nh, TCA_FLOWER_KEY_UDP_SRC,
> - spec->hdr.src_port);
> + tap_nlattr_add16(msg, TCA_FLOWER_KEY_UDP_SRC,
> + spec->hdr.src_port);
> return 0;
> }
>
> @@ -804,15 +790,13 @@ tap_flow_create_tcp(const struct rte_flow_item
> *item, void *data)
> if (!flow)
> return 0;
> msg = &flow->msg;
> - tap_nlattr_add8(&msg->nh, TCA_FLOWER_KEY_IP_PROTO, IPPROTO_TCP);
> + tap_nlattr_add8(msg, TCA_FLOWER_KEY_IP_PROTO, IPPROTO_TCP);
> if (!spec)
> return 0;
> if (mask->hdr.dst_port)
> - tap_nlattr_add16(&msg->nh, TCA_FLOWER_KEY_TCP_DST,
> - spec->hdr.dst_port);
> + tap_nlattr_add16(msg, TCA_FLOWER_KEY_TCP_DST,
> + spec->hdr.dst_port);
> if (mask->hdr.src_port)
> - tap_nlattr_add16(&msg->nh, TCA_FLOWER_KEY_TCP_SRC,
> - spec->hdr.src_port);
> + tap_nlattr_add16(msg, TCA_FLOWER_KEY_TCP_SRC,
> + spec->hdr.src_port);
> return 0;
> }
>
> @@ -920,35 +904,27 @@ add_action(struct rte_flow *flow, size_t *act_index,
> struct action_data *adata)
> if (tap_nlattr_nested_start(msg, (*act_index)++) < 0)
> return -1;
>
> - tap_nlattr_add(&msg->nh, TCA_ACT_KIND,
> - strlen(adata->id) + 1, adata->id);
> + tap_nlattr_add(msg, TCA_ACT_KIND, strlen(adata->id) + 1,
> + adata->id);
> if (tap_nlattr_nested_start(msg, TCA_ACT_OPTIONS) < 0)
> return -1;
> if (strcmp("gact", adata->id) == 0) {
> - tap_nlattr_add(&msg->nh, TCA_GACT_PARMS, sizeof(adata->gact),
> - &adata->gact);
> + tap_nlattr_add(msg, TCA_GACT_PARMS, sizeof(adata->gact),
> + &adata->gact);
> } else if (strcmp("mirred", adata->id) == 0) {
> if (adata->mirred.eaction == TCA_EGRESS_MIRROR)
> adata->mirred.action = TC_ACT_PIPE;
> else /* REDIRECT */
> adata->mirred.action = TC_ACT_STOLEN;
> - tap_nlattr_add(&msg->nh, TCA_MIRRED_PARMS,
> - sizeof(adata->mirred),
> - &adata->mirred);
> + tap_nlattr_add(msg, TCA_MIRRED_PARMS,
> + sizeof(adata->mirred), &adata->mirred);
> } else if (strcmp("skbedit", adata->id) == 0) {
> - tap_nlattr_add(&msg->nh, TCA_SKBEDIT_PARMS,
> - sizeof(adata->skbedit.skbedit),
> - &adata->skbedit.skbedit);
> - tap_nlattr_add16(&msg->nh, TCA_SKBEDIT_QUEUE_MAPPING,
> - adata->skbedit.queue);
> + tap_nlattr_add(msg, TCA_SKBEDIT_PARMS, sizeof(adata-
> >skbedit.skbedit),
> + &adata->skbedit.skbedit);
> + tap_nlattr_add16(msg, TCA_SKBEDIT_QUEUE_MAPPING,
> + adata->skbedit.queue);
> } else if (strcmp("bpf", adata->id) == 0) {
> - tap_nlattr_add32(&msg->nh, TCA_ACT_BPF_FD, adata->bpf.bpf_fd);
> - tap_nlattr_add(&msg->nh, TCA_ACT_BPF_NAME,
> - strlen(adata->bpf.annotation) + 1,
> - adata->bpf.annotation);
> - tap_nlattr_add(&msg->nh, TCA_ACT_BPF_PARMS,
> - sizeof(adata->bpf.bpf),
> - &adata->bpf.bpf);
> + tap_nlattr_add32(msg, TCA_ACT_BPF_FD, adata->bpf.bpf_fd);
> + tap_nlattr_add(msg, TCA_ACT_BPF_NAME, strlen(adata-
> >bpf.annotation) + 1,
> + adata->bpf.annotation);
> + tap_nlattr_add(msg, TCA_ACT_BPF_PARMS, sizeof(adata->bpf.bpf),
> + &adata->bpf.bpf);
> } else {
> return -1;
> }
> @@ -1078,7 +1054,7 @@ priv_flow_process(struct pmd_internals *pmd,
> TC_H_MAKE(MULTIQ_MAJOR_HANDLE, 0);
> }
> /* use flower filter type */
> - tap_nlattr_add(&flow->msg.nh, TCA_KIND, sizeof("flower"), "flower");
> + tap_nlattr_add(&flow->msg, TCA_KIND, sizeof("flower"),
> + "flower");
> if (tap_nlattr_nested_start(&flow->msg, TCA_OPTIONS) < 0) {
> rte_flow_error_set(error, ENOMEM,
> RTE_FLOW_ERROR_TYPE_ACTION,
> actions, "could not allocated netlink msg"); @@ -
> 1118,15 +1094,11 @@ priv_flow_process(struct pmd_internals *pmd,
> }
> if (flow) {
> if (data.vlan) {
> - tap_nlattr_add16(&flow->msg.nh, TCA_FLOWER_KEY_ETH_TYPE,
> - htons(ETH_P_8021Q));
> - tap_nlattr_add16(&flow->msg.nh,
> - TCA_FLOWER_KEY_VLAN_ETH_TYPE,
> - data.eth_type ?
> - data.eth_type : htons(ETH_P_ALL));
> + tap_nlattr_add16(&flow->msg, TCA_FLOWER_KEY_ETH_TYPE,
> htons(ETH_P_8021Q));
> + tap_nlattr_add16(&flow->msg,
> TCA_FLOWER_KEY_VLAN_ETH_TYPE,
> + data.eth_type ? data.eth_type :
> + htons(ETH_P_ALL));
> } else if (data.eth_type) {
> - tap_nlattr_add16(&flow->msg.nh, TCA_FLOWER_KEY_ETH_TYPE,
> - data.eth_type);
> + tap_nlattr_add16(&flow->msg,
> + TCA_FLOWER_KEY_ETH_TYPE, data.eth_type);
> }
> }
> if (mirred && flow) {
> @@ -1919,13 +1891,13 @@ static int rss_enable(struct pmd_internals *pmd,
> msg->t.tcm_info = TC_H_MAKE(prio << 16, msg->t.tcm_info);
> msg->t.tcm_parent = TC_H_MAKE(MULTIQ_MAJOR_HANDLE, 0);
>
> - tap_nlattr_add(&msg->nh, TCA_KIND, sizeof("bpf"), "bpf");
> + tap_nlattr_add(msg, TCA_KIND, sizeof("bpf"), "bpf");
> if (tap_nlattr_nested_start(msg, TCA_OPTIONS) < 0)
> return -1;
> - tap_nlattr_add32(&msg->nh, TCA_BPF_FD, pmd->bpf_fd[i]);
> + tap_nlattr_add32(msg, TCA_BPF_FD, pmd->bpf_fd[i]);
> snprintf(annotation, sizeof(annotation), "[%s%d]",
> SEC_NAME_CLS_Q, i);
> - tap_nlattr_add(&msg->nh, TCA_BPF_NAME, strlen(annotation) + 1,
> + tap_nlattr_add(msg, TCA_BPF_NAME, strlen(annotation) +
> + 1,
> annotation);
> /* Actions */
> {
> diff --git a/drivers/net/tap/tap_netlink.c b/drivers/net/tap/tap_netlink.c index
> 35c491ac37..1d8b61e5ab 100644
> --- a/drivers/net/tap/tap_netlink.c
> +++ b/drivers/net/tap/tap_netlink.c
> @@ -293,18 +293,18 @@ tap_nl_recv(int nlsk_fd, int (*cb)(struct nlmsghdr *,
> void *arg), void *arg)
> * The data to append.
> */
> void
> -tap_nlattr_add(struct nlmsghdr *nh, unsigned short type,
> +tap_nlattr_add(struct nlmsg *msg, unsigned short type,
> unsigned int data_len, const void *data) {
> /* see man 3 rtnetlink */
> struct rtattr *rta;
>
> - rta = (struct rtattr *)NLMSG_TAIL(nh);
> + rta = (struct rtattr *)NLMSG_TAIL(msg);
> rta->rta_len = RTA_LENGTH(data_len);
> rta->rta_type = type;
> if (data_len > 0)
> memcpy(RTA_DATA(rta), data, data_len);
> - nh->nlmsg_len = NLMSG_ALIGN(nh->nlmsg_len) + RTA_ALIGN(rta-
> >rta_len);
> + msg->nh.nlmsg_len = NLMSG_ALIGN(msg->nh.nlmsg_len) +
> + RTA_ALIGN(rta->rta_len);
> }
>
> /**
> @@ -318,9 +318,9 @@ tap_nlattr_add(struct nlmsghdr *nh, unsigned short
> type,
> * The data to append.
> */
> void
> -tap_nlattr_add8(struct nlmsghdr *nh, unsigned short type, uint8_t data)
> +tap_nlattr_add8(struct nlmsg *msg, unsigned short type, uint8_t data)
> {
> - tap_nlattr_add(nh, type, sizeof(uint8_t), &data);
> + tap_nlattr_add(msg, type, sizeof(uint8_t), &data);
> }
>
> /**
> @@ -334,9 +334,9 @@ tap_nlattr_add8(struct nlmsghdr *nh, unsigned short
> type, uint8_t data)
> * The data to append.
> */
> void
> -tap_nlattr_add16(struct nlmsghdr *nh, unsigned short type, uint16_t data)
> +tap_nlattr_add16(struct nlmsg *msg, unsigned short type, uint16_t data)
> {
> - tap_nlattr_add(nh, type, sizeof(uint16_t), &data);
> + tap_nlattr_add(msg, type, sizeof(uint16_t), &data);
> }
>
> /**
> @@ -350,9 +350,9 @@ tap_nlattr_add16(struct nlmsghdr *nh, unsigned short
> type, uint16_t data)
> * The data to append.
> */
> void
> -tap_nlattr_add32(struct nlmsghdr *nh, unsigned short type, uint32_t data)
> +tap_nlattr_add32(struct nlmsg *msg, unsigned short type, uint32_t data)
> {
> - tap_nlattr_add(nh, type, sizeof(uint32_t), &data);
> + tap_nlattr_add(msg, type, sizeof(uint32_t), &data);
> }
>
> /**
> @@ -379,9 +379,9 @@ tap_nlattr_nested_start(struct nlmsg *msg, uint16_t
> type)
> return -1;
> }
>
> - tail->tail = (struct rtattr *)NLMSG_TAIL(&msg->nh);
> + tail->tail = (struct rtattr *)NLMSG_TAIL(msg);
>
> - tap_nlattr_add(&msg->nh, type, 0, NULL);
> + tap_nlattr_add(msg, type, 0, NULL);
>
> tail->prev = msg->nested_tails;
>
> @@ -404,7 +404,7 @@ tap_nlattr_nested_finish(struct nlmsg *msg) {
> struct nested_tail *tail = msg->nested_tails;
>
> - tail->tail->rta_len = (char *)NLMSG_TAIL(&msg->nh) - (char *)tail->tail;
> + tail->tail->rta_len = (char *)NLMSG_TAIL(msg) - (char
> + *)tail->tail;
>
> if (tail->prev)
> msg->nested_tails = tail->prev; diff --git
> a/drivers/net/tap/tap_netlink.h b/drivers/net/tap/tap_netlink.h index
> faa73ba163..c1493b6bf0 100644
> --- a/drivers/net/tap/tap_netlink.h
> +++ b/drivers/net/tap/tap_netlink.h
> @@ -23,7 +23,7 @@ struct nlmsg {
> struct nested_tail *nested_tails; };
>
> -#define NLMSG_TAIL(nlh) (void *)((char *)(nlh) + NLMSG_ALIGN((nlh)-
> >nlmsg_len))
> +#define NLMSG_TAIL(msg) (void *)((char *)(msg) +
> +NLMSG_ALIGN((msg)->nh.nlmsg_len))
>
> int tap_nl_init(uint32_t nl_groups);
> int tap_nl_final(int nlsk_fd);
> @@ -31,11 +31,11 @@ int tap_nl_send(int nlsk_fd, struct nlmsghdr *nh); int
> tap_nl_recv(int nlsk_fd, int (*callback)(struct nlmsghdr *, void *),
> void *arg);
> int tap_nl_recv_ack(int nlsk_fd);
> -void tap_nlattr_add(struct nlmsghdr *nh, unsigned short type,
> +void tap_nlattr_add(struct nlmsg *msg, unsigned short type,
> unsigned int data_len, const void *data); -void
> tap_nlattr_add8(struct nlmsghdr *nh, unsigned short type, uint8_t data); -void
> tap_nlattr_add16(struct nlmsghdr *nh, unsigned short type, uint16_t data); -
> void tap_nlattr_add32(struct nlmsghdr *nh, unsigned short type, uint32_t
> data);
> +void tap_nlattr_add8(struct nlmsg *msg, unsigned short type, uint8_t
> +data); void tap_nlattr_add16(struct nlmsg *msg, unsigned short type,
> +uint16_t data); void tap_nlattr_add32(struct nlmsg *msg, unsigned short
> +type, uint32_t data);
> int tap_nlattr_nested_start(struct nlmsg *msg, uint16_t type); void
> tap_nlattr_nested_finish(struct nlmsg *msg);
>
> diff --git a/drivers/net/tap/tap_tcmsgs.c b/drivers/net/tap/tap_tcmsgs.c index
> 24a0423a0e..f811deef24 100644
> --- a/drivers/net/tap/tap_tcmsgs.c
> +++ b/drivers/net/tap/tap_tcmsgs.c
> @@ -123,8 +123,8 @@ qdisc_add_multiq(int nlsk_fd, unsigned int ifindex)
> NLM_F_REQUEST | NLM_F_ACK | NLM_F_EXCL | NLM_F_CREATE);
> msg.t.tcm_handle = TC_H_MAKE(MULTIQ_MAJOR_HANDLE, 0);
> msg.t.tcm_parent = TC_H_ROOT;
> - tap_nlattr_add(&msg.nh, TCA_KIND, sizeof("multiq"), "multiq");
> - tap_nlattr_add(&msg.nh, TCA_OPTIONS, sizeof(opt), &opt);
> + tap_nlattr_add(&msg, TCA_KIND, sizeof("multiq"), "multiq");
> + tap_nlattr_add(&msg, TCA_OPTIONS, sizeof(opt), &opt);
> if (tap_nl_send(nlsk_fd, &msg.nh) < 0)
> return -1;
> if (tap_nl_recv_ack(nlsk_fd) < 0) @@ -152,7 +152,7 @@
> qdisc_add_ingress(int nlsk_fd, unsigned int ifindex)
> NLM_F_REQUEST | NLM_F_ACK | NLM_F_EXCL | NLM_F_CREATE);
> msg.t.tcm_handle = TC_H_MAKE(TC_H_INGRESS, 0);
> msg.t.tcm_parent = TC_H_INGRESS;
> - tap_nlattr_add(&msg.nh, TCA_KIND, sizeof("ingress"), "ingress");
> + tap_nlattr_add(&msg, TCA_KIND, sizeof("ingress"), "ingress");
> if (tap_nl_send(nlsk_fd, &msg.nh) < 0)
> return -1;
> if (tap_nl_recv_ack(nlsk_fd) < 0)
> --
> 2.51.0
This patch was applied also to 23.11.
Thanks,
Shani
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-12-30 10:04 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-10-29 14:27 [PATCH 22.11] net/tap: fix build with LTO David Marchand
2025-12-30 10:04 ` Shani Peretz
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).