On 26.07.2016 04:45, Daniele Di Proietto wrote: > Thanks for the patch > > It looks good to me, a few minor comments inline > > > On 15/07/2016 04:54, "Ilya Maximets" <i.maxim...@samsung.com> wrote: > >> This commit adds functionality to pass value of 'other_config' column >> of 'Interface' table to datapath. >> >> This may be used to pass not directly connected with netdev options and >> configure behaviour of the datapath for different ports. >> For example: pinning of rx queues to polling threads in dpif-netdev. >> >> Signed-off-by: Ilya Maximets <i.maxim...@samsung.com> >> --- >> lib/dpif-netdev.c | 1 + >> lib/dpif-netlink.c | 1 + >> lib/dpif-provider.h | 5 +++++ >> lib/dpif.c | 17 +++++++++++++++++ >> lib/dpif.h | 1 + >> ofproto/ofproto-dpif.c | 16 ++++++++++++++++ >> ofproto/ofproto-provider.h | 5 +++++ >> ofproto/ofproto.c | 29 +++++++++++++++++++++++++++++ >> ofproto/ofproto.h | 2 ++ >> vswitchd/bridge.c | 2 ++ >> 10 files changed, 79 insertions(+) >> >> [...] >> >> diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c >> index ce9383a..97510a9 100644 >> --- a/ofproto/ofproto-dpif.c >> +++ b/ofproto/ofproto-dpif.c >> @@ -3542,6 +3542,21 @@ port_del(struct ofproto *ofproto_, ofp_port_t >> ofp_port) >> } >> >> static int >> +port_set_config(struct ofproto *ofproto_, ofp_port_t ofp_port, >> + const struct smap *cfg) > > Can we change this to directly take struct ofport_dpif *ofport instead of > ofp_port_t?
We can't get 'struct ofport_dpif *' because ofproto layer knows nothing about 'ofport_dpif' structure. All that we can is to get 'struct ofport *' and cast it. How about following fixup to this patch: ---------------------------------------------------------------------- diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c index 3a13326..79f2aa0 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -3543,14 +3543,13 @@ port_del(struct ofproto *ofproto_, ofp_port_t ofp_port) } static int -port_set_config(struct ofproto *ofproto_, ofp_port_t ofp_port, - const struct smap *cfg) +port_set_config(const struct ofport *ofport_, const struct smap *cfg) { - struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_); - struct ofport_dpif *ofport = ofp_port_to_ofport(ofproto, ofp_port); + struct ofport_dpif *ofport = ofport_dpif_cast(ofport_); + struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofport->up.ofproto); - if (!ofport || sset_contains(&ofproto->ghost_ports, - netdev_get_name(ofport->up.netdev))) { + if (sset_contains(&ofproto->ghost_ports, + netdev_get_name(ofport->up.netdev))) { return 0; } diff --git a/ofproto/ofproto-provider.h b/ofproto/ofproto-provider.h index 2fc7452..7156814 100644 --- a/ofproto/ofproto-provider.h +++ b/ofproto/ofproto-provider.h @@ -972,10 +972,9 @@ struct ofproto_class { * convenient. */ int (*port_del)(struct ofproto *ofproto, ofp_port_t ofp_port); - /* Refreshes dtapath configuration of port number 'ofp_port' in 'ofproto'. + /* Refreshes datapath configuration of 'port'. * Returns 0 if successful, otherwise a positive errno value. */ - int (*port_set_config)(struct ofproto *ofproto, ofp_port_t ofp_port, - const struct smap *cfg); + int (*port_set_config)(const struct ofport *port, const struct smap *cfg); /* Get port stats */ int (*port_get_stats)(const struct ofport *port, diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c index c66c866..6cd2600 100644 --- a/ofproto/ofproto.c +++ b/ofproto/ofproto.c @@ -2079,7 +2079,7 @@ ofproto_port_del(struct ofproto *ofproto, ofp_port_t ofp_port) return error; } -/* Refreshes dtapath configuration of port number 'ofp_port' in 'ofproto'. +/* Refreshes datapath configuration of port number 'ofp_port' in 'ofproto'. * * This function has no effect if 'ofproto' does not have a port 'ofp_port'. */ void @@ -2097,10 +2097,10 @@ ofproto_port_set_config(struct ofproto *ofproto, ofp_port_t ofp_port, } error = (ofproto->ofproto_class->port_set_config - ? ofproto->ofproto_class->port_set_config(ofproto, ofp_port, cfg) + ? ofproto->ofproto_class->port_set_config(ofport, cfg) : EOPNOTSUPP); if (error) { - VLOG_WARN("%s: dtatapath configuration on port %"PRIu16 + VLOG_WARN("%s: datapath configuration on port %"PRIu16 " (%s) failed (%s)", ofproto->name, ofp_port, netdev_get_name(ofport->netdev), ovs_strerror(error)); ---------------------------------------------------------------------- >> +{ >> + struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_); >> + struct ofport_dpif *ofport = ofp_port_to_ofport(ofproto, ofp_port); >> + >> + if (!ofport || sset_contains(&ofproto->ghost_ports, >> + netdev_get_name(ofport->up.netdev))) { >> + return 0; >> + } >> + >> + return dpif_port_set_config(ofproto->backer->dpif, ofport->odp_port, >> cfg); >> +} >> + >> +static int >> port_get_stats(const struct ofport *ofport_, struct netdev_stats *stats) >> { >> struct ofport_dpif *ofport = ofport_dpif_cast(ofport_); >> @@ -5609,6 +5624,7 @@ const struct ofproto_class ofproto_dpif_class = { >> port_query_by_name, >> port_add, >> port_del, >> + port_set_config, >> port_get_stats, >> port_dump_start, >> port_dump_next, >> diff --git a/ofproto/ofproto-provider.h b/ofproto/ofproto-provider.h >> index ae6c08d..883641d 100644 >> --- a/ofproto/ofproto-provider.h >> +++ b/ofproto/ofproto-provider.h >> @@ -972,6 +972,11 @@ struct ofproto_class { >> * convenient. */ >> int (*port_del)(struct ofproto *ofproto, ofp_port_t ofp_port); >> >> + /* Refreshes dtapath configuration of port number 'ofp_port' in >> 'ofproto'. > > s/dtapath/datapath/ Oh, copy-pasted typo. Thanks for pointing this. Fixed in fixup above. I'll send v4 when the review of patch #3 will be finished. Best regards, Ilya Maximets. _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev