> -----Original Message----- > From: Thomas Monjalon [mailto:thomas.monjalon at 6wind.com] > Sent: Wednesday, October 22, 2014 5:19 AM > To: Liu, Jijiang > Cc: dev at dpdk.org > Subject: Re: [dpdk-dev] [PATCH v6 2/9] librte_ether:add VxLAN packet > identification API in librte_ether > > 2014-10-21 13:48, Liu, Jijiang: > > From: Thomas Monjalon [mailto:thomas.monjalon at 6wind.com] > > > 2014-10-21 16:46, Jijiang Liu: > > > > int > > > > +rte_eth_dev_udp_tunnel_add(uint8_t port_id, > > > > + struct rte_eth_udp_tunnel *udp_tunnel, > > > > + uint8_t count) > > > > +{ > > > > + uint8_t i; > > > > + struct rte_eth_dev *dev; > > > > + struct rte_eth_udp_tunnel *tunnel; > > > > + > > > > + if (port_id >= nb_ports) { > > > > + PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id); > > > > + return -ENODEV; > > > > + } > > > > + > > > > + if (udp_tunnel == NULL) { > > > > + PMD_DEBUG_TRACE("Invalid udp_tunnel parameter\n"); > > > > + return -EINVAL; > > > > + } > > > > + tunnel = udp_tunnel; > > > > + > > > > + for (i = 0; i < count; i++, tunnel++) { > > > > + if (tunnel->prot_type >= RTE_TUNNEL_TYPE_MAX) { > > > > + PMD_DEBUG_TRACE("Invalid tunnel type\n"); > > > > + return -EINVAL; > > > > + } > > > > + } > > > > > > I'm not sure it's a good idea to provide a count parameter to > > > iterate in a loop. > > > It's probably something that the application should do by itself. > > > > It is necessary to check if this prot_type(tunnel type) is valid here > > in case applications don't do that. > > Yes, you have to check prot_type but looping for several tunnels is not > needed at this level. > > > > But I doubt we should configure a tunnel type for a whole port. > > > > Yes, your understanding is correct. It is for a whole port/PF, that's > > why we should add tunnel_type in rte_eth_conf structure. > > Please explain me why a tunnel type should be associated to a port. > This design looks really broken.
I don't think this design looks really broken. Currently, A PF associated to a port, right? What tunnel type should be supported in a PF, which is required we configure it. Tunneling packet is encapsulation packet, in terms of VxLAN, packet format is outer L2 header+ outer L3 header +outer L4 header + tunneling header+ inner L2 header + inner L3 header + inner L4 header +PAY4. For a VM/VF, the real useful packet data is "inner L2 header + inner L3 header + inner L4 header +PAY4". In NIC, A port/PF receive this kind of tunneling packet(outer L2+...PAY4), software should be responsible for decapsulating the packet and deliver real data(innerL2 + PAY4) to VM/VF? DPDK just provide API/mechanism to guarantee a PF/port to receive the tunneling packet data, the encapsulation/ decapsulation work should be done by user application. Normally, the tunneling packet processing like below: Tunneling packet ------>PF processing/receive ---------> application SW do decapsulation -------> VF/VM processing > Thanks > -- > Thomas