Hi Richard,
Thanks for your comments. Here are the replies.
On Sat, Jun 17, 2017 at 07:21:08AM +0200, Richard Cochran wrote:
> > Here are the brief descriptions.
> >
> > 1. add slave info in struct interface, something like
> > struct interface {
> > STAILQ_ENTRY(interface) list;
> > char name[MAX_IFNAME_SIZE + 1];
> > char slave[MAX_IFNAME_SIZE + 1];
> > int index;
> > int slave_index;
> > int linkup;
> > int slave_changed;
>
> I don't think this new state is needed, because...
Which state? all the new elements or just the last slave_changed variable?
>
> > struct sk_ts_info ts_info;
> > };
> > 2. get current interface's active slave via netlink message when
> > config_create_interface()
> > 3. set clock's PHC index to active slave's PHC index when clock_create()
>
> ... step 2 can also be done in clock_create(), can't it?
In clock_create()
STAILQ_FOREACH(iface, &config->interfaces, list) {
if (iface->ts_info.valid &&
((iface->ts_info.so_timestamping & required_modes) !=
required_modes)) {
...
}
}
we get iface from config and check iface->ts_info.valid. The ts_info need to
be current slave's ts_info. What I parepared to do is something like
strncpy(iface->name, name, MAX_IFNAME_SIZE);
- sk_get_ts_info(iface->name, &iface->ts_info);
+ rtnl_link_info(iface);
+
+ if (iface->slave) {
+ sk_get_ts_info(iface->slave, &iface->ts_info);
+ } else {
+ sk_get_ts_info(iface->name, &iface->ts_info);
+ }
in config_create_interface(). That we get interface's slave info and ts_info
during config.
So what you want is to get new ts_info in clock_create() and do not store
slave information in struct interface, right?
>
> > 4. when bond/team fail over, get new active slave index
>
> How do you detect fail over?
via rtnl_link_status() callback, we can get bond slave info in
rta->rta_type == IFLA_BOND_ACTIVE_SLAVE.
>
> > 5. update clock phc info via clock_switch_phc(), update port status
> > via port_dispatch()
> > 6. Use automatic mode in phc2sys to automatically sync correct PHC.
>
> Another question: The sockets must be bound to the slave interface,
> and not to the bonding master interface, correct? If so, there is
Yes.
> more work to do than clock_switch_phc() at fail over time.
Yes, we also need to reset port phc index to new phc, set port re-initialize via
port_dispatch(p, EV_INITIALIZE, 0). Open/renew transport with slave name. etc.
And maybe more that I don't know. Please correct me if I missed anything when
I post the patch set.
>
> > Limits and unresolved issues:
> > 1. Only support bond/team active-backup
> > 2. Only works with phc2sys automatic mode. But how about manual
> > config? -s bond0?
>
> I think phc2sys will also need some work.
hmm, I'm looking what we should do to make phc2sys aware the node changed
and reconfig it.
run_pmc_events(node);
if (node->state_changed) {
reconfigure(node);
}
>
> > 3. What about vlan?
>
> VLAN already works with normal (non-bonding) interfaces. Not sure
> about the bonding case.
I think we can talk about this later.
>
> > 4. What if new active slave do not support required timestamp flags.
> > Just report fail?
>
> Yes, just let the port become FAULTY.
OK, got it.
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