Thanks a bunch Nitin, your mail helps me connect the dots -- the thing I was missing was the connection with ethernet_register_interface() Cool browsing done by you ! Please do check my other mail too on the list (for frames) and it would be great if we can drill down on that topic too.
Regards -Prashant On Fri, May 11, 2018 at 7:08 PM, Nitin Saxena <nitin.sax...@cavium.com> wrote: > Hi Prashant, > > Hope you are doing fine. > > Regarding your question, I am not able to see macswap plugin in current > master branch but I will try to explain wrt dpdk_plugin: > > With respect to low level device each VPP device driver registers for > > 1) INPUT_NODE (For Rx) VLIB_REGISTER_NODE (This you already figured out) > 2) And Tx function via VNET_DEVICE_CLASS (), Device class like "dpdk" > There are couple of more function pointers registered but let stick to Rx/Tx > part. > > As part of startup low level plugin/driver calls > ethernet_register_interface() which in turn calls vnet_register_interface(). > > vnet_register_interface: > For a particular interface like Intel 40G, init time interface node is > created and the tx function of that node is copied from > VNET_DEVICE_CLASS{.tx_function=<xxxx>"}. node->tx and node->output functions > are properly initialized and node is registered. > > VPP stack sends packet to this low level Tx node via sw_if_index. I am > guessing sw_if_index is determined by IPv4 routing or L2 switching. > > I think vnet_set_interface_output_node() is called for those interface (Tx > path) whose DEVICE_CLASS do not provide tx_functions but I am not sure. > > "show vlib graph" will tell you how nodes are arranged in vpp graph. > > To be specific for your question > > next0 = hi0->output_node_next_index; > > output_node_next_index is the index of next node at which the current vector > has to be copied. (Transition from one node to another along the graph) > > Note: All this I got through browsing code and if this information is not > correct, I request VPP experts to correct it. > > Thanks, > Nitin > > > On Thursday 10 May 2018 02:19 PM, Prashant Upadhyaya wrote: >> >> Hi, >> >> I am trying to walk throught the code to see how the packet arrives >> into the system at dpdk rx side and finally leaves it at the dpdk tx >> side. I am using the context of the macswap sample plugin for this. >> >> It is clear to me that dpdk-input is a graph node and it is an 'input' >> type graph node so it polls for the packets using dpdk functions. The >> frame is then eventually passed to the sample plugin because the >> sample plugin inserts itself at the right place. The sample plugin >> queues the packets to the interface-output graph node. >> >> So now I check the interface-output graph node function. >> I locate that in vpp/src/vnet/interface_output.c >> So the dispatch function for the graph node is >> vnet_per_buffer_interface_output >> Here the interface-output node is queueing the packets to a next node >> based on the following code -- >> >> hi0 = >> vnet_get_sup_hw_interface (vnm, >> vnet_buffer (b0)->sw_if_index >> [VLIB_TX]); >> >> next0 = hi0->output_node_next_index; >> >> Now I am a little lost, what is this output_node_next_index ? Which >> graph node function is really called for really emitting the packet ? >> Where exactly is this setup ? >> >> I do see that the actual dpdk tx burst function is called from >> tx_burst_vector_internal, which itself is called from >> dpdk_interface_tx (vpp/src/plugins/dpdk/device/device.c). But how the >> code reaches the dpdk_interface_tx after the packets are queued from >> interface-output graph node is not clear to me. If somebody could help >> me connect the dots, that would be great. >> >> Regards >> -Prashant >> >> >> > -=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#9275): https://lists.fd.io/g/vpp-dev/message/9275 View All Messages In Topic (3): https://lists.fd.io/g/vpp-dev/topic/19023164 Mute This Topic: https://lists.fd.io/mt/19023164/21656 New Topic: https://lists.fd.io/g/vpp-dev/post Change Your Subscription: https://lists.fd.io/g/vpp-dev/editsub/21656 Group Home: https://lists.fd.io/g/vpp-dev Contact Group Owner: vpp-dev+ow...@lists.fd.io Terms of Service: https://lists.fd.io/static/tos Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub -=-=-=-=-=-=-=-=-=-=-=-