On Tue, Dec 13, 2011 at 03:18:17PM -0800, Ethan Jackson wrote:
> Why are min and max args 'int's instead of 'size_t's or 'unsigned'?

I was drawing an analogy to main(), which has an "int" for argc.

> In ofproto/trace, you have a case which expects argc == 6, but you
> only allow a maximum of 4 (+ 1 = 5) arguments when you register.  It
> looks like you are leaving off the priority field in the usage of the
> register call.

Good point, both fixed:

diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
index 23b3369..4661d2b 100644
--- a/ofproto/ofproto-dpif.c
+++ b/ofproto/ofproto-dpif.c
@@ -5787,8 +5787,8 @@ ofproto_dpif_unixctl_init(void)
 
     unixctl_command_register(
         "ofproto/trace",
-        "bridge {tun_id in_port packet | odp_flow [-generate]}",
-        2, 4, ofproto_unixctl_trace, NULL);
+        "bridge {priority tun_id in_port packet | odp_flow [-generate]}",
+        2, 5, ofproto_unixctl_trace, NULL);
     unixctl_command_register("fdb/flush", "bridge", 1, 1,
                              ofproto_unixctl_fdb_flush, NULL);
     unixctl_command_register("fdb/show", "bridge", 1, 1,

> The argument parsing of ofproto/trace is pretty confusing in general.
> I wonder if it would be worth unit testing all of the possible code
> paths beyond what we're already doing for the ofproto-dpif unit tests.

I agree that that is a good idea.

> > @@ -803,11 +803,8 @@ netdev_linux_recv(struct netdev *netdev_, void *data, 
> > size_t size)
> >
> >     for (;;) {
> >         ssize_t retval = recv(netdev->fd, data, size, MSG_TRUNC);
> > -        if (retval > size) {
> > -            /* Received packet was longer than supplied buffer. */
> > -            return -EMSGSIZE;
> > -        } else if (retval >= 0) {
> > -            return retval;
> > +        if (retval >= 0) {
> > +            return retval <= size ? retval : -EMSGSIZE;
> 
> This looks like a rebasing error to me.  Was it intended for this patch?

You are right, that's a mistake.  I have now folded it into
"netdev-linux: Report error for truncated packets on receive."

> > +    for (i = 0; i < n_stress_options; i++) {
> > +        struct stress_option *option = stress_options[i];
> > +        if (!strcmp(option_name, option->name)) {
> > +            unsigned int period = strtoul(option_val, NULL, 0);
> > +            bool random = !strcmp(argv[3], "random");
> 
> argv[3] could be NULL here.

Good point, fixed:

diff --git a/lib/stress.c b/lib/stress.c
index 0fdc79a..7247b3b 100644
--- a/lib/stress.c
+++ b/lib/stress.c
@@ -190,7 +190,7 @@ stress_unixctl_set(struct unixctl_conn *conn, int argc 
OVS_UNUSED,
         struct stress_option *option = stress_options[i];
         if (!strcmp(option_name, option->name)) {
             unsigned int period = strtoul(option_val, NULL, 0);
-            bool random = !strcmp(argv[3], "random");
+            bool random = argc >= 4 && !strcmp(argv[3], "random");
 
             stress_set(option, period, random);
             code = 200;

> > +    unixctl_command_register(
> > +        "vlog/set", "{module[:facility[:level]] | 
> > PATTERN:facility:pattern}",
> 
> I might be inclined to add a ... to the end of the usage argument.
> However, I don't know what standard practice for this sort of thing
> is.

Sure, I added the ..., thank you.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to