Looks Good.

On Fri, Mar 25, 2011 at 10:35 AM, Ben Pfaff <b...@nicira.com> wrote:
> This makes it easier to pass configuration between modules.
> ---
>  lib/lacp.c        |   36 ++++++++++++++++--------------------
>  lib/lacp.h        |   26 +++++++++++++++++++-------
>  vswitchd/bridge.c |   49 ++++++++++++++++++++++++++++---------------------
>  3 files changed, 63 insertions(+), 48 deletions(-)
>
> diff --git a/lib/lacp.c b/lib/lacp.c
> index 094b036..068f81e 100644
> --- a/lib/lacp.c
> +++ b/lib/lacp.c
> @@ -123,22 +123,19 @@ lacp_destroy(struct lacp *lacp)
>     }
>  }
>
> -/* Configures 'lacp' with the given 'name', 'sys_id', 'sys_priority', and
> - * 'active' parameters. */
> +/* Configures 'lacp' with settings from 's'. */
>  void
> -lacp_configure(struct lacp *lacp, const char *name,
> -               const uint8_t sys_id[ETH_ADDR_LEN], uint16_t sys_priority,
> -               bool active, bool fast)
> +lacp_configure(struct lacp *lacp, const struct lacp_settings *s)
>  {
> -    if (!lacp->name || strcmp(name, lacp->name)) {
> +    if (!lacp->name || strcmp(s->name, lacp->name)) {
>         free(lacp->name);
> -        lacp->name = xstrdup(name);
> +        lacp->name = xstrdup(s->name);
>     }
>
> -    memcpy(lacp->sys_id, sys_id, ETH_ADDR_LEN);
> -    lacp->sys_priority = sys_priority;
> -    lacp->active = active;
> -    lacp->fast = fast;
> +    memcpy(lacp->sys_id, s->id, ETH_ADDR_LEN);
> +    lacp->sys_priority = s->priority;
> +    lacp->active = s->active;
> +    lacp->fast = s->fast;
>  }
>
>  /* Returns true if 'lacp' is configured in active mode, false if 'lacp' is
> @@ -184,10 +181,10 @@ lacp_negotiated(const struct lacp *lacp)
>
>  /* Registers 'slave_' as subordinate to 'lacp'.  This should be called at 
> least
>  * once per slave in a LACP managed bond.  Should also be called whenever a
> - * slave's name, port_id, or port_priority change. */
> + * slave's settings change. */
>  void
> -lacp_slave_register(struct lacp *lacp, void *slave_, const char *name,
> -                    uint16_t port_id, uint16_t port_priority)
> +lacp_slave_register(struct lacp *lacp, void *slave_,
> +                    const struct lacp_slave_settings *s)
>  {
>     struct slave *slave = slave_lookup(lacp, slave_);
>
> @@ -203,15 +200,14 @@ lacp_slave_register(struct lacp *lacp, void *slave_, 
> const char *name,
>         }
>     }
>
> -    if (!slave->name || strcmp(name, slave->name)) {
> +    if (!slave->name || strcmp(s->name, slave->name)) {
>         free(slave->name);
> -        slave->name = xstrdup(name);
> +        slave->name = xstrdup(s->name);
>     }
>
> -    if (slave->port_id != port_id || slave->port_priority != port_priority) {
> -
> -        slave->port_id = port_id;
> -        slave->port_priority = port_priority;
> +    if (slave->port_id != s->id || slave->port_priority != s->priority) {
> +        slave->port_id = s->id;
> +        slave->port_priority = s->priority;
>
>         lacp->update = true;
>
> diff --git a/lib/lacp.h b/lib/lacp.h
> index c5f3c2f..29383dc 100644
> --- a/lib/lacp.h
> +++ b/lib/lacp.h
> @@ -21,29 +21,41 @@
>  #include <stdint.h>
>  #include "packets.h"
>
> -/* Function called when a LACP PDU is ready to be sent out the given slave */
> -typedef void lacp_send_pdu(void *slave, const struct lacp_pdu *);
> +struct lacp_settings {
> +    char *name;
> +    uint8_t id[ETH_ADDR_LEN];
> +    uint16_t priority;
> +    bool active;
> +    bool fast;
> +};
>
>  void lacp_init(void);
>  struct lacp *lacp_create(void);
>  void lacp_destroy(struct lacp *);
>
> -void lacp_configure(struct lacp *, const char *name,
> -                    const uint8_t sys_id[ETH_ADDR_LEN],
> -                    uint16_t sys_priority, bool active, bool fast);
> +void lacp_configure(struct lacp *, const struct lacp_settings *);
>  bool lacp_is_active(const struct lacp *);
>
>  void lacp_process_pdu(struct lacp *, const void *slave,
>                       const struct lacp_pdu *);
>  bool lacp_negotiated(const struct lacp *);
>
> -void lacp_slave_register(struct lacp *, void *slave_, const char *name,
> -                         uint16_t port_id, uint16_t port_priority);
> +struct lacp_slave_settings {
> +    char *name;
> +    uint16_t id;
> +    uint16_t priority;
> +};
> +
> +void lacp_slave_register(struct lacp *, void *slave_,
> +                         const struct lacp_slave_settings *);
>  void lacp_slave_unregister(struct lacp *, const void *slave);
>  void lacp_slave_enable(struct lacp *lacp, void *slave_, bool enabled);
>  void lacp_slave_carrier_changed(const struct lacp *, const void *slave);
>  bool lacp_slave_may_enable(const struct lacp *, const void *slave);
>
> +/* Callback function for lacp_run() for sending a LACP PDU. */
> +typedef void lacp_send_pdu(void *slave, const struct lacp_pdu *);
> +
>  void lacp_run(struct lacp *, lacp_send_pdu *);
>  void lacp_wait(struct lacp *);
>
> diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
> index fea574d..1d158e8 100644
> --- a/vswitchd/bridge.c
> +++ b/vswitchd/bridge.c
> @@ -4214,14 +4214,28 @@ enable_lacp(struct port *port, bool *activep)
>  }
>
>  static void
> +iface_update_lacp(struct iface *iface)
> +{
> +    struct lacp_slave_settings s;
> +    int priority;
> +
> +    s.name = iface->name;
> +    s.id = iface->dp_ifidx;
> +    priority = atoi(get_interface_other_config(
> +                        iface->cfg, "lacp-port-priority", "0"));
> +    s.priority = (priority >= 0 && priority <= UINT16_MAX ? priority
> +                  : UINT16_MAX);
> +
> +    lacp_slave_register(iface->port->lacp, iface, &s);
> +}
> +
> +static void
>  port_update_lacp(struct port *port)
>  {
> +    struct lacp_settings s;
>     struct iface *iface;
> -    int priority;
> -    bool active;
> -    bool fast;
>
> -    if (!enable_lacp(port, &active)) {
> +    if (!enable_lacp(port, &s.active)) {
>         lacp_destroy(port->lacp);
>         port->lacp = NULL;
>         return;
> @@ -4231,28 +4245,21 @@ port_update_lacp(struct port *port)
>         port->lacp = lacp_create();
>     }
>
> -    fast = !strcmp(get_port_other_config(port->cfg, "lacp-time", "slow"),
> -                   "fast");
> -
> -    priority = atoi(get_port_other_config(port->cfg, "lacp-system-priority",
> +    s.name = port->name;
> +    memcpy(s.id, port->bridge->ea, ETH_ADDR_LEN);
> +    s.priority = atoi(get_port_other_config(port->cfg, 
> "lacp-system-priority",
>                                           "0"));
> -    if (priority <= 0 || priority > UINT16_MAX) {
> +    s.fast = !strcmp(get_port_other_config(port->cfg, "lacp-time", "slow"),
> +                     "fast");
> +
> +    if (s.priority <= 0 || s.priority > UINT16_MAX) {
>         /* Prefer bondable links if unspecified. */
> -        priority = UINT16_MAX - (port->n_ifaces > 1);
> +        s.priority = UINT16_MAX - (port->n_ifaces > 1);
>     }
>
> -    lacp_configure(port->lacp, port->name, port->bridge->ea, priority,
> -                   active, fast);
> -
> +    lacp_configure(port->lacp, &s);
>     LIST_FOR_EACH (iface, port_elem, &port->ifaces) {
> -        priority = atoi(get_interface_other_config(
> -                            iface->cfg, "lacp-port-priority", "0"));
> -        if (priority <= 0 || priority > UINT16_MAX) {
> -            priority = UINT16_MAX;
> -        }
> -
> -        lacp_slave_register(port->lacp, iface, iface->name,
> -                            iface->dp_ifidx, priority);
> +        iface_update_lacp(iface);
>     }
>  }
>
> --
> 1.7.1
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to