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

Reply via email to