diff options
-rw-r--r-- | examples/udpfwd/main.c | 14 | ||||
-rw-r--r-- | lib/libtle_udp/tle_udp_impl.h | 12 | ||||
-rw-r--r-- | lib/libtle_udp/udp_ctl.c | 40 |
3 files changed, 41 insertions, 25 deletions
diff --git a/examples/udpfwd/main.c b/examples/udpfwd/main.c index 96150b0..f8a6f1b 100644 --- a/examples/udpfwd/main.c +++ b/examples/udpfwd/main.c @@ -751,7 +751,7 @@ create_context(struct netbe_lcore *lc, const struct tle_udp_ctx_param *ctx_prm) */ static int lcore_init(struct netbe_lcore *lc, const struct tle_udp_ctx_param *ctx_prm, - const uint32_t prtqid, uint16_t *bl_ports, uint32_t nb_bl_ports) + const uint32_t prtqid, const uint16_t *bl_ports, uint32_t nb_bl_ports) { int32_t rc = 0; struct tle_udp_dev_param dprm; @@ -765,8 +765,10 @@ lcore_init(struct netbe_lcore *lc, const struct tle_udp_ctx_param *ctx_prm, dprm.local_addr4.s_addr = lc->prtq[prtqid].port.ipv4; memcpy(&dprm.local_addr6, &lc->prtq[prtqid].port.ipv6, sizeof(lc->prtq[prtqid].port.ipv6)); - dprm.nb_bl_ports = nb_bl_ports; - dprm.bl_ports = bl_ports; + dprm.bl4.nb_port = nb_bl_ports; + dprm.bl4.port = bl_ports; + dprm.bl6.nb_port = nb_bl_ports; + dprm.bl6.port = bl_ports; lc->prtq[prtqid].dev = tle_udp_add_dev(lc->ctx, &dprm); @@ -814,13 +816,12 @@ netbe_lcore_init(struct netbe_cfg *cfg, const struct tle_udp_ctx_param *ctx_prm) { int32_t rc; - uint32_t i, j, nb_bl_ports, sz; + uint32_t i, j, nb_bl_ports = 0, sz; struct netbe_lcore *lc; static uint16_t *bl_ports; /* Create the udp context and attached queue for each lcore. */ rc = 0; - nb_bl_ports = 0; sz = sizeof(uint16_t) * UINT16_MAX; bl_ports = rte_zmalloc(NULL, sz, RTE_CACHE_LINE_SIZE); for (i = 0; i < cfg->cpu_num; i++) { @@ -830,7 +831,8 @@ netbe_lcore_init(struct netbe_cfg *cfg, /* create list of blocked ports based on q */ nb_bl_ports = create_blocklist(&lc->prtq[j].port, bl_ports, lc->prtq[j].rxqid); - RTE_LOG(NOTICE, USER1, "lc=%u, q=%u, nb_bl_ports4=%u\n", + RTE_LOG(NOTICE, USER1, + "lc=%u, q=%u, nb_bl_ports=%u\n", lc->id, lc->prtq[j].rxqid, nb_bl_ports); rc = lcore_init(lc, ctx_prm, j, bl_ports, nb_bl_ports); diff --git a/lib/libtle_udp/tle_udp_impl.h b/lib/libtle_udp/tle_udp_impl.h index b46e4dd..a0af7ce 100644 --- a/lib/libtle_udp/tle_udp_impl.h +++ b/lib/libtle_udp/tle_udp_impl.h @@ -56,6 +56,14 @@ struct tle_udp_ctx; struct tle_udp_dev; /** + * Blocked UDP ports info. + */ +struct tle_bl_port { + uint32_t nb_port; /**< number of blocked ports. */ + const uint16_t *port; /**< list of blocked ports. */ +}; + +/** * UDP device parameters. */ struct tle_udp_dev_param { @@ -63,8 +71,8 @@ struct tle_udp_dev_param { uint32_t tx_offload; /**< DEV_TX_OFFLOAD_* supported. */ struct in_addr local_addr4; /**< local IPv4 address assigned. */ struct in6_addr local_addr6; /**< local IPv6 address assigned. */ - uint32_t nb_bl_ports; /**< number of blocked ports. */ - uint16_t *bl_ports; /**< list of blocked ports. */ + struct tle_bl_port bl4; /**< blocked ports for IPv4 address. */ + struct tle_bl_port bl6; /**< blocked ports for IPv4 address. */ }; #define TLE_UDP_MAX_HDR 0x60 diff --git a/lib/libtle_udp/udp_ctl.c b/lib/libtle_udp/udp_ctl.c index 3ff9751..618a7ef 100644 --- a/lib/libtle_udp/udp_ctl.c +++ b/lib/libtle_udp/udp_ctl.c @@ -48,8 +48,12 @@ check_dev_prm(const struct tle_udp_dev_param *dev_prm) return -EINVAL; /* all the ports are blocked. */ - if (dev_prm->nb_bl_ports > UINT16_MAX || - (dev_prm->nb_bl_ports != 0 && dev_prm->bl_ports == NULL)) + if (dev_prm->bl4.nb_port > UINT16_MAX || + (dev_prm->bl4.nb_port != 0 && dev_prm->bl4.port == NULL)) + return -EINVAL; + + if (dev_prm->bl6.nb_port > UINT16_MAX || + (dev_prm->bl6.nb_port != 0 && dev_prm->bl6.port == NULL)) return -EINVAL; return 0; @@ -245,12 +249,20 @@ tle_udp_ctx_invalidate(struct tle_udp_ctx *ctx) RTE_SET_USED(ctx); } +static void +fill_pbm(struct udp_pbm *pbm, const struct tle_bl_port *blp) +{ + uint32_t i; + + for (i = 0; i != blp->nb_port; i++) + udp_pbm_set(pbm, blp->port[i]); +} + static int init_dev_proto(struct tle_udp_dev *dev, uint32_t idx, int32_t socket_id, - uint16_t *bl_ports, uint32_t nb_bl_ports) + const struct tle_bl_port *blp) { size_t sz; - uint32_t i; sz = sizeof(*dev->dp[idx]); dev->dp[idx] = rte_zmalloc_socket(NULL, sz, RTE_CACHE_LINE_SIZE, @@ -264,10 +276,7 @@ init_dev_proto(struct tle_udp_dev *dev, uint32_t idx, int32_t socket_id, } udp_pbm_init(&dev->dp[idx]->use, LPORT_START_BLK); - - if (bl_ports != NULL) - for (i = 0; i < nb_bl_ports; i++) - udp_pbm_set(&dev->dp[idx]->use, bl_ports[i]); + fill_pbm(&dev->dp[idx]->use, blp); return 0; } @@ -293,7 +302,6 @@ tle_udp_add_dev(struct tle_udp_ctx *ctx, const struct tle_udp_dev_param *dev_prm) { int32_t rc; - uint32_t i; struct tle_udp_dev *dev; if (ctx == NULL || dev_prm == NULL || check_dev_prm(dev_prm) != 0) { @@ -309,20 +317,18 @@ tle_udp_add_dev(struct tle_udp_ctx *ctx, /* device can handle IPv4 traffic */ if (dev_prm->local_addr4.s_addr != INADDR_ANY) { rc = init_dev_proto(dev, TLE_UDP_V4, ctx->prm.socket_id, - dev_prm->bl_ports, dev_prm->nb_bl_ports); - for (i = 0; i < dev_prm->nb_bl_ports; i++) - udp_pbm_set(&ctx->use[TLE_UDP_V4], - dev_prm->bl_ports[i]); + &dev_prm->bl4); + if (rc == 0) + fill_pbm(&ctx->use[TLE_UDP_V4], &dev_prm->bl4); } /* device can handle IPv6 traffic */ if (rc == 0 && memcmp(&dev_prm->local_addr6, &tle_udp6_any, sizeof(tle_udp6_any)) != 0) { rc = init_dev_proto(dev, TLE_UDP_V6, ctx->prm.socket_id, - dev_prm->bl_ports, dev_prm->nb_bl_ports); - for (i = 0; i < dev_prm->nb_bl_ports; i++) - udp_pbm_set(&ctx->use[TLE_UDP_V6], - dev_prm->bl_ports[i]); + &dev_prm->bl6); + if (rc == 0) + fill_pbm(&ctx->use[TLE_UDP_V6], &dev_prm->bl6); } if (rc != 0) { |