I sent a proper patch: http://openvswitch.org/pipermail/dev/2016-March/068600.html
On Thu, Mar 24, 2016 at 11:57 AM, Mauricio Vásquez < mauricio.vasquezber...@studenti.polito.it> wrote: > Hi Aaron, > > First of all thank you very much for your feedback. > > I didn't pay that attention to the style, I'll correct all the issues when > I send a proper patch, by the way, is there any script or tool to check the > style?, I looked for it and I cannot find anything. > > On Wed, Mar 23, 2016 at 11:42 AM, Aaron Conole <acon...@redhat.com> wrote: > >> Hi Mauricio, >> >> Mauricio Vasquez B <mauricio.vasquezber...@studenti.polito.it> writes: >> >> > In order to use dpdk ports in ovs they have to be bound to a DPDK >> > compatible driver before ovs is started. >> > >> > This patch adds the possibility to hotplug (or hot-unplug) a device >> > after ovs has been started. The implementation adds two appctl commands: >> > netdev-dpdk/attach and netdev-dpdk/detach. >> > >> > After the user attaches a new device, it can use the add-port command >> > to use it in a switch, similarly, before detaching a device, it has to >> > be removed using the del-port command. >> > >> > Signed-off-by: Mauricio Vasquez B < >> mauricio.vasquezber...@studenti.polito.it> >> > --- >> >> I like the patch a lot, it really helps with the ease-of-use of >> OVS. So, thanks very much for the work. >> >> > lib/netdev-dpdk.c | 79 >> +++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> > 1 file changed, 79 insertions(+) >> > >> > diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c >> > index f402354..c3a99e7 100644 >> > --- a/lib/netdev-dpdk.c >> > +++ b/lib/netdev-dpdk.c >> > @@ -2253,12 +2253,91 @@ dpdk_vhost_user_class_init(void) >> > } >> > >> > static void >> > +netdev_dpdk_attach(struct unixctl_conn *conn, int argc, >> > + const char *argv[], void *aux OVS_UNUSED) >> ^ I think there's a spacing issue here. >> >> > +{ >> > + int ret; >> > + uint8_t port_id; >> > + char response[512]; >> > + >> > + ovs_mutex_lock(&dpdk_mutex); >> > + >> > + ret = rte_eth_dev_attach(argv[1], &port_id); >> > + if(ret < 0) { >> ^ Spacing issue here >> >> > + snprintf(response, sizeof(response), >> > + "Error attaching device ''", argv[1]); >> ^ Spacing issue here >> >> > + unixctl_command_reply_error(conn, response); >> > + goto unlock; >> > + } >> > + >> >> Does it make sense to also create the netdev at this point? >> > > Personally, I think that it is better not to create it, I have these two > reasons for the moment: > 1. Creating a port does not only implies creating the netdev in > netdev-dpdk, it implies creating the port in all the upper layers. It would > be necessary to use ovsdb in order to do it, I don't know if it is allowed > to use ovsdb in that way from a netdev-provider. > 2. If the user invokes some external element (an orchestrator for example) > that adds the port, after attaching the port, it could fail due to the port > is already there. > > >> > + snprintf(response, sizeof(response), >> > + "Device '%s' has been attached as 'dpdk%d'", argv[1], >> port_id); >> >> ^ Spacing issue here. >> >> > + unixctl_command_reply(conn, response); >> > + >> > +unlock: >> > + ovs_mutex_unlock(&dpdk_mutex); >> > +} >> > + >> > +static void >> > +netdev_dpdk_detach(struct unixctl_conn *conn, int argc, >> > + const char *argv[], void *aux OVS_UNUSED) >> ^ Spacing issue here. >> >> > +{ >> > + int ret; >> > + unsigned int port_id; >> > + char name[RTE_ETH_NAME_MAX_LEN]; >> > + char response[512]; >> > + >> > + ret = dpdk_dev_parse_name(argv[1], "dpdk", &port_id); >> > + if(ret) { >> ^ Spacing issue here. >> >> > + snprintf(response, sizeof(response), >> > + "'%s' is not a valid dpdk device", argv[1]); >> ^ Spacing issue here. >> >> > + unixctl_command_reply_error(conn, response); >> > + return; >> > + } >> > + >> > + ovs_mutex_lock(&dpdk_mutex); >> > + >> > + struct netdev * netdev = netdev_from_name(argv[1]); >> > + if(netdev) { >> ^ Spacing issue here. >> >> > + netdev_close(netdev); >> > + snprintf(response, sizeof(response), >> > + "Port '%s' is being used. Remove it before >> detaching", argv[1]); >> > + unixctl_command_reply_error(conn, response); >> > + goto unlock; >> > + } >> > + >> > + rte_eth_dev_close(port_id); >> > + >> > + ret = rte_eth_dev_detach(port_id, name); >> > + if(ret < 0) { >> ^ Spacing issue here. >> >> > + snprintf(response, sizeof(response), >> > + "Port '%s' can not be detached", argv[1]); >> > + unixctl_command_reply_error(conn, response); >> > + goto unlock; >> > + } >> > + >> > + snprintf(response, sizeof(response), "Port '%s' has been >> detached", argv[1]); >> ^ Please stick to 80-bytes on a line. >> >> > + unixctl_command_reply(conn, response); >> > + >> > +unlock: >> > + ovs_mutex_unlock(&dpdk_mutex); >> > +} >> > + >> > +static void >> > dpdk_common_init(void) >> > { >> > unixctl_command_register("netdev-dpdk/set-admin-state", >> > "[netdev] up|down", 1, 2, >> > netdev_dpdk_set_admin_state, NULL); >> > >> > + unixctl_command_register("netdev-dpdk/attach", >> > + "device", 1, 1, >> > + netdev_dpdk_attach, NULL); >> > + >> > + unixctl_command_register("netdev-dpdk/detach", >> > + "port", 1, 1, >> > + netdev_dpdk_detach, NULL); >> > + >> Does it make sense to have a single command ``netdev-dpdk/port-ctl'' >> that takes either attach/detach as an argument? I think it looks a bit >> better, and you might be able to combine a lot of the code above into a >> single function, but I have been wrong on user-experience stuff before. >> > > Yes, it makes a lot of sense, my only concern is that both parameters > (attach and detach) would not receive the same type of argument, attach > receives the pci address while detach receives the port name, however I > think it is not a big problem, there are more advantages in creating a > single command. > > I will send a proper patch updating also the documentation. > > >> >> > ovs_thread_create("dpdk_watchdog", dpdk_watchdog, NULL); >> > } >> >> Thanks again, >> -Aaron >> > > Mauricio V, > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev