net/tap: fix overflow of network interface index
On Linux and most other systems, network interface index is a 32-bit integer. Indexes overflowing the 16-bit integer are frequently seen when used inside a Docker container. Fixes:7c25284e30
("net/tap: add netlink back-end for flow API") Fixes:2bc06869cd
("net/tap: add remote netdevice traffic capture") Cc: stable@dpdk.org Signed-off-by: Alex Kiselev <alex@bisonrouter.com> Acked-by: Stephen Hemminger <stephen@networkplumber.org>
This commit is contained in:
parent
6caffbb319
commit
8772bbfa71
@ -1682,7 +1682,7 @@ int tap_flow_implicit_create(struct pmd_internals *pmd,
|
||||
struct rte_flow_item *items = implicit_rte_flows[idx].items;
|
||||
struct rte_flow_attr *attr = &implicit_rte_flows[idx].attr;
|
||||
struct rte_flow_item_eth eth_local = { .type = 0 };
|
||||
uint16_t if_index = pmd->remote_if_index;
|
||||
unsigned int if_index = pmd->remote_if_index;
|
||||
struct rte_flow *remote_flow = NULL;
|
||||
struct nlmsg *msg = NULL;
|
||||
int err = 0;
|
||||
|
@ -19,7 +19,7 @@ struct qdisc {
|
||||
|
||||
struct list_args {
|
||||
int nlsk_fd;
|
||||
uint16_t ifindex;
|
||||
unsigned int ifindex;
|
||||
void *custom_arg;
|
||||
};
|
||||
|
||||
@ -42,7 +42,7 @@ struct qdisc_custom_arg {
|
||||
* Overrides the default netlink flags for this msg with those specified.
|
||||
*/
|
||||
void
|
||||
tc_init_msg(struct nlmsg *msg, uint16_t ifindex, uint16_t type, uint16_t flags)
|
||||
tc_init_msg(struct nlmsg *msg, unsigned int ifindex, uint16_t type, uint16_t flags)
|
||||
{
|
||||
struct nlmsghdr *n = &msg->nh;
|
||||
|
||||
@ -70,7 +70,7 @@ tc_init_msg(struct nlmsg *msg, uint16_t ifindex, uint16_t type, uint16_t flags)
|
||||
* 0 on success, -1 otherwise with errno set.
|
||||
*/
|
||||
static int
|
||||
qdisc_del(int nlsk_fd, uint16_t ifindex, struct qdisc *qinfo)
|
||||
qdisc_del(int nlsk_fd, unsigned int ifindex, struct qdisc *qinfo)
|
||||
{
|
||||
struct nlmsg msg;
|
||||
int fd = 0;
|
||||
@ -114,7 +114,7 @@ qdisc_del(int nlsk_fd, uint16_t ifindex, struct qdisc *qinfo)
|
||||
* 0 on success, -1 otherwise with errno set.
|
||||
*/
|
||||
int
|
||||
qdisc_add_multiq(int nlsk_fd, uint16_t ifindex)
|
||||
qdisc_add_multiq(int nlsk_fd, unsigned int ifindex)
|
||||
{
|
||||
struct tc_multiq_qopt opt = {0};
|
||||
struct nlmsg msg;
|
||||
@ -144,7 +144,7 @@ qdisc_add_multiq(int nlsk_fd, uint16_t ifindex)
|
||||
* 0 on success, -1 otherwise with errno set.
|
||||
*/
|
||||
int
|
||||
qdisc_add_ingress(int nlsk_fd, uint16_t ifindex)
|
||||
qdisc_add_ingress(int nlsk_fd, unsigned int ifindex)
|
||||
{
|
||||
struct nlmsg msg;
|
||||
|
||||
@ -208,7 +208,7 @@ qdisc_del_cb(struct nlmsghdr *nh, void *arg)
|
||||
* 0 on success, -1 otherwise with errno set.
|
||||
*/
|
||||
static int
|
||||
qdisc_iterate(int nlsk_fd, uint16_t ifindex,
|
||||
qdisc_iterate(int nlsk_fd, unsigned int ifindex,
|
||||
int (*callback)(struct nlmsghdr *, void *), void *arg)
|
||||
{
|
||||
struct nlmsg msg;
|
||||
@ -238,7 +238,7 @@ qdisc_iterate(int nlsk_fd, uint16_t ifindex,
|
||||
* 0 on success, -1 otherwise with errno set.
|
||||
*/
|
||||
int
|
||||
qdisc_flush(int nlsk_fd, uint16_t ifindex)
|
||||
qdisc_flush(int nlsk_fd, unsigned int ifindex)
|
||||
{
|
||||
return qdisc_iterate(nlsk_fd, ifindex, qdisc_del_cb, NULL);
|
||||
}
|
||||
@ -256,7 +256,7 @@ qdisc_flush(int nlsk_fd, uint16_t ifindex)
|
||||
* Return -1 otherwise.
|
||||
*/
|
||||
int
|
||||
qdisc_create_multiq(int nlsk_fd, uint16_t ifindex)
|
||||
qdisc_create_multiq(int nlsk_fd, unsigned int ifindex)
|
||||
{
|
||||
int err = 0;
|
||||
|
||||
@ -282,7 +282,7 @@ qdisc_create_multiq(int nlsk_fd, uint16_t ifindex)
|
||||
* Return -1 otherwise.
|
||||
*/
|
||||
int
|
||||
qdisc_create_ingress(int nlsk_fd, uint16_t ifindex)
|
||||
qdisc_create_ingress(int nlsk_fd, unsigned int ifindex)
|
||||
{
|
||||
int err = 0;
|
||||
|
||||
|
@ -24,14 +24,14 @@
|
||||
|
||||
#define MULTIQ_MAJOR_HANDLE (1 << 16)
|
||||
|
||||
void tc_init_msg(struct nlmsg *msg, uint16_t ifindex, uint16_t type,
|
||||
void tc_init_msg(struct nlmsg *msg, unsigned int ifindex, uint16_t type,
|
||||
uint16_t flags);
|
||||
int qdisc_list(int nlsk_fd, uint16_t ifindex);
|
||||
int qdisc_flush(int nlsk_fd, uint16_t ifindex);
|
||||
int qdisc_create_ingress(int nlsk_fd, uint16_t ifindex);
|
||||
int qdisc_create_multiq(int nlsk_fd, uint16_t ifindex);
|
||||
int qdisc_add_ingress(int nlsk_fd, uint16_t ifindex);
|
||||
int qdisc_add_multiq(int nlsk_fd, uint16_t ifindex);
|
||||
int filter_list_ingress(int nlsk_fd, uint16_t ifindex);
|
||||
int qdisc_list(int nlsk_fd, unsigned int ifindex);
|
||||
int qdisc_flush(int nlsk_fd, unsigned int ifindex);
|
||||
int qdisc_create_ingress(int nlsk_fd, unsigned int ifindex);
|
||||
int qdisc_create_multiq(int nlsk_fd, unsigned int ifindex);
|
||||
int qdisc_add_ingress(int nlsk_fd, unsigned int ifindex);
|
||||
int qdisc_add_multiq(int nlsk_fd, unsigned int ifindex);
|
||||
int filter_list_ingress(int nlsk_fd, unsigned int ifindex);
|
||||
|
||||
#endif /* _TAP_TCMSGS_H_ */
|
||||
|
Loading…
Reference in New Issue
Block a user