Hey, most of code looks good to me, Few comments inline mostly at netdev-bsd.c:
@@ -162,7 +160,7 @@ netdev_bsd_cast(const struct netdev *netdev) > static struct netdev_rx_bsd * > netdev_rx_bsd_cast(const struct netdev_rx *rx) > { > - netdev_rx_assert_class(rx, &netdev_rx_bsd_class); > + ovs_assert(is_netdev_bsd_class(netdev_get_class(rx->netdev))); > return CONTAINER_OF(rx, struct netdev_rx_bsd, up); > } > The "is_netdev_bsd_class()" function also requires modification, since there is no "init()" function. > > @@ -269,12 +267,18 @@ cache_notifier_unref(void) > return 0; > } > > +static struct netdev * > +netdev_bsd_alloc(void) > +{ > + struct netdev_bsd *netdev = xzalloc(sizeof *netdev); > + return &netdev->up; > +} > + > /* Allocate a netdev_bsd structure */ > static int > Should we move this comment up to "netdev_bsd_alloc"? Seems more appropriate there. > @@ -378,9 +373,7 @@ netdev_bsd_create_tap(const struct netdev_class > *class, const char *name, > > /* initialize the device structure and > * link the structure to its netdev */ > - netdev_init(&netdev->up, name, class); > netdev->kernel_name = kernel_name; > - *netdevp = &netdev->up; > > The comment above is not applicable. > return 0; > > @@ -393,7 +386,7 @@ error: > } > > error: free(netdev); In the end there shouldn't be the "free(netdev)", > @@ -1385,8 +1390,6 @@ const struct netdev_class netdev_bsd_class = { > NULL, /* set_config */ > NULL, /* get_tunnel_config */ > > - netdev_bsd_rx_open, > - > netdev_bsd_send, > netdev_bsd_send_wait, > Miss the alloc/construct/destruct/dealloc functions. > const struct netdev_class netdev_tap_class = { > "tap", > > - netdev_bsd_init, > + NULL, /* init */ > netdev_bsd_run, > netdev_bsd_wait, > netdev_bsd_create_tap, > Miss the alloc/construct/destruct/dealloc functions. > diff --git a/lib/netdev.c b/lib/netdev.c > index 30c44a2..0fdebe8 100644 > --- a/lib/netdev.c > +++ b/lib/netdev.c > @@ -259,22 +259,36 @@ netdev_open(const char *name, const char > + } > + if (!error) { > + netdev->ref_cnt++; > } > - netdev->ref_cnt++; > > *netdevp = netdev; > - return 0; > + return error; > } > > Could we move "*netdevp = netdev;" into the "if" statement? So, in error, "netdevp = NULL". > /* Returns a reference to 'netdev_' for the caller to own. Returns null if > @@ -348,7 +362,11 @@ netdev_unref(struct netdev *dev) > { > ovs_assert(dev->ref_cnt); > if (!--dev->ref_cnt) { > - netdev_uninit(dev, true); > + dev->netdev_class->destruct(dev); > + > + shash_delete(&netdev_shash, dev->node); > + free(dev->name); > + dev->netdev_class->dealloc(dev); > } > } In "netdev_open()" there is the "list_init(&netdev->saved_flags_list);". I didn't find the where we check and free the list elements.
_______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev