On Tue, Oct 08, 2013 at 12:41:11PM -0700, Jarno Rajahalme wrote:
> Ben Pfaff <[email protected]> wrote:
> 
> > The dpif interface supports 65536 ports, but OpenFlow 1.0 supports fewer,
> > so ofproto-dpif needs to filter out port numbers larger than OF1.0 supports
> > and report an error to the caller.
> > 
> > Reported-by: Hiroshi Tanaka <[email protected]>
> > Signed-off-by: Ben Pfaff <[email protected]>
> > 
> > ---
> > ofproto/ofproto-dpif.c |    5 +++++
> >  1 files changed, 5 insertions(+), 0 deletions(-)
> > 
> > diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
> > index ce2ae7f..fcca99b 100644
> > --- a/ofproto/ofproto-dpif.c
> > +++ b/ofproto/ofproto-dpif.c
> > @@ -2545,6 +2545,11 @@ port_add(struct ofproto *ofproto_, struct netdev 
> > *netdev, uint16_t *ofp_portp)
> >      int error;
> >  
> >      error = dpif_port_add(ofproto->dpif, netdev, &odp_port);
> > +    if (!error && odp_port >= OFPP_MAX) {
> > +        /* Out of ports in the OpenFlow range. */
> > +        dpif_port_del(ofproto->dpif, odp_port);
> > +        error = EFBIG;
> > +    }
> >      if (!error) {
> >          *ofp_portp = odp_port_to_ofp_port(odp_port);
> >      }
> > 
> 
> The check would seem more proper after the ODP port number has been
> translated to an OFP one, right after odp_port_to_ofp_port().

Thanks for the review.

In OVS 1.9, there was barely any difference between ODP and OpenFlow
port numbers, so this code should work.  But I agree that checking the
OpenFlow port number is more conceptually correct.

How about this version?

--8<--------------------------cut here-------------------------->8--

From: Ben Pfaff <[email protected]>
Date: Tue, 8 Oct 2013 12:57:40 -0700
Subject: [PATCH] ofproto-dpif: Better tolerate running out of ports.

The dpif interface supports 65536 ports, but OpenFlow 1.0 supports fewer,
so ofproto-dpif needs to filter out port numbers larger than OF1.0 supports
and report an error to the caller.

Reported-by: Hiroshi Tanaka <[email protected]>
Signed-off-by: Ben Pfaff <[email protected]>
---
 ofproto/ofproto-dpif.c |    5 +++++
 1 file changed, 5 insertions(+)

diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
index 173eb5a..fa639a6 100644
--- a/ofproto/ofproto-dpif.c
+++ b/ofproto/ofproto-dpif.c
@@ -2547,6 +2547,11 @@ port_add(struct ofproto *ofproto_, struct netdev 
*netdev, uint16_t *ofp_portp)
     error = dpif_port_add(ofproto->dpif, netdev, &odp_port);
     if (!error) {
         *ofp_portp = odp_port_to_ofp_port(odp_port);
+        if (*ofp_portp >= OFPP_MAX) {
+            /* Out of ports in the OpenFlow range. */
+            dpif_port_del(ofproto->dpif, odp_port);
+            error = EFBIG;
+        }
     }
     return error;
 }
-- 
1.7.10.4

_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev

Reply via email to