static int cmd_dumplist(struct team_handle *th, int argc, char **argv) { char *opt; if (argc == 1) { fprintf(stderr, "List name not specified\n"); usage(); } opt = argv[1]; if (strcmp(opt, "ports") == 0) { struct team_port *port; team_for_each_port(port, th) { uint32_t ifindex = team_get_port_ifindex(port); printf("ifname %s, linkup %d, changed %d, speed %d, " "duplex %d\n", get_port_name(th, ifindex), team_is_port_link_up(port), team_is_port_changed(port), team_get_port_speed(port), team_get_port_duplex(port)); } } else {
static int port_change_handler_func(struct team_handle *th, void *arg, team_change_type_mask_t type_mask) { struct team_port *port; printf("------------------\nport change\n\tport list:\n"); team_for_each_port(port, th) { uint32_t ifindex = team_get_port_ifindex(port); printf("\tifname %s, linkup %d, changed %d, speed %d, " "duplex %d\n", get_port_name(th, ifindex), team_is_port_link_up(port), team_is_port_changed(port), team_get_port_speed(port), team_get_port_duplex(port)); }
static int lw_ethtool_event_watch_port_changed(struct teamd_context *ctx, struct teamd_port *tdport, void *priv) { struct lw_common_port_priv *common_ppriv = priv; struct lw_ethtool_port_priv *ethtool_ppriv = priv; bool link_up; struct timespec *delay; int err; if (common_ppriv->tdport != tdport || !team_is_port_changed(tdport->team_port)) return 0; /* * Link changed for sure, so if there is some delay in progress, * cancel it before proceeding. */ teamd_loop_callback_disable(ctx, LW_ETHTOOL_DELAY_CB_NAME, priv); link_up = team_is_port_link_up(tdport->team_port); if (!teamd_link_watch_link_up_differs(common_ppriv, link_up)) return 0; if (link_up) { if (timespec_is_zero(ðtool_ppriv->delay_up)) goto nodelay; delay = ðtool_ppriv->delay_up; } else { if (timespec_is_zero(ðtool_ppriv->delay_down)) goto nodelay; delay = ðtool_ppriv->delay_down; } err = teamd_loop_callback_timer_set(ctx, LW_ETHTOOL_DELAY_CB_NAME, priv, NULL, delay); if (err) { teamd_log_err("Failed to set delay timer."); return err; } teamd_loop_callback_enable(ctx, LW_ETHTOOL_DELAY_CB_NAME, priv); return 0; nodelay: return teamd_link_watch_check_link_up(ctx, tdport, common_ppriv, link_up); }