On Wed, Aug 09, 2017 at 08:49:34AM +0200, Richard Cochran wrote:
> On Tue, Aug 08, 2017 at 06:16:37PM +0800, Hangbin Liu wrote:
> > The goal of this call path is to call port_link_status() whenever link
> > status
> > changed. And the call path should like
> >
> > 1. port_event() -> rtnl_link_status() -> port_link_status()
> >
> > > 2. clock_create() -> rtnl_link_info() -> rtnl_link_status()
> >
> > This one only want to get the bond slave info when add iface at the
> > begining.
>
> Right.
>
> > What do you think? any other good ideas?
>
> Yes, I have an idea. Pass an interface index (instead of a string) to
> port_link_status(), and then you can remove the ugly code.
>
> if (cb)
> device = calloc(1, sizeof(MAX_IFNAME_SIZE + 1));
> else
> device = (char *)ctx;
Yes, that would be more clear, especially the call path 1. Then how about
2. clock_create() -> rtnl_link_info() -> rtnl_link_status()
Should we get the ts_iface inside rtnl_link_status() like:
err = rtnl_link_status(fd, iface->ts_label, NULL, NULL);
int rtnl_link_status(int fd, char *slave, rtnl_callback cb, void *ctx)
{
...
if (tb[IFLA_LINKINFO])
slave_index = rtnl_linkinfo_parse(tb[IFLA_LINKINFO]);
if (cb)
cb(ctx, index, link_up, slave_index);
if (slave)
if_indextoname(slave_index, slave);
...
}
Or just let rtnl_link_status() return ts_iface index directly, like:
ts_iface_index = rtnl_link_status(fd, NULL, NULL);
int rtnl_link_status(int fd, rtnl_callback cb, void *ctx)
{
...
if (tb[IFLA_LINKINFO])
slave_index = rtnl_linkinfo_parse(tb[IFLA_LINKINFO]);
if (cb)
cb(ctx, index, link_up, slave_index);
...
return slave_index;
}
Thanks
Hangbin
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linuxptp-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel