This will be later used by OF1.4 bundles to check added messages. Signed-off-by: Alexandru Copot <alex.miha...@gmail.com> Cc: Daniel Baluta <dbal...@ixiacom.com> --- ofproto/ofproto.c | 33 +++++++++++++++++++++++---------- ofproto/ofproto.h | 5 +++++ 2 files changed, 28 insertions(+), 10 deletions(-)
diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c index d92bafd..cf3f271 100644 --- a/ofproto/ofproto.c +++ b/ofproto/ofproto.c @@ -3025,36 +3025,49 @@ update_port_config(struct ofconn *ofconn, struct ofport *port, } } -static enum ofperr -handle_port_mod(struct ofconn *ofconn, const struct ofp_header *oh) +enum ofperr +check_port_mod(struct ofconn *ofconn, const struct ofp_header *oh, + struct ofputil_port_mod *pm, struct ofport **port) { struct ofproto *p = ofconn_get_ofproto(ofconn); - struct ofputil_port_mod pm; - struct ofport *port; enum ofperr error; + *port = NULL; error = reject_slave_controller(ofconn); if (error) { return error; } - error = ofputil_decode_port_mod(oh, &pm); + error = ofputil_decode_port_mod(oh, pm); if (error) { return error; } - port = ofproto_get_port(p, pm.port_no); - if (!port) { + *port = ofproto_get_port(p, pm->port_no); + if (!*port) { return OFPERR_OFPPMFC_BAD_PORT; - } else if (!eth_addr_equals(port->pp.hw_addr, pm.hw_addr)) { + } else if (!eth_addr_equals((*port)->pp.hw_addr, pm->hw_addr)) { return OFPERR_OFPPMFC_BAD_HW_ADDR; - } else { + } + + return 0; +} + +static enum ofperr +handle_port_mod(struct ofconn *ofconn, const struct ofp_header *oh) +{ + struct ofputil_port_mod pm; + struct ofport *port; + enum ofperr error; + + error = check_port_mod(ofconn, oh, &pm, &port); + if (!error) { update_port_config(ofconn, port, pm.config, pm.mask); if (pm.advertise) { netdev_set_advertisements(port->netdev, pm.advertise); } } - return 0; + return error; } static enum ofperr diff --git a/ofproto/ofproto.h b/ofproto/ofproto.h index 9ba6354..60cbdd1 100644 --- a/ofproto/ofproto.h +++ b/ofproto/ofproto.h @@ -44,6 +44,11 @@ struct ofproto; struct shash; struct simap; struct smap; +struct ofconn; + +enum ofperr +check_port_mod(struct ofconn *ofconn, const struct ofp_header *oh, + struct ofputil_port_mod *pm, struct ofport **port); struct ofproto_controller_info { bool is_connected; -- 1.9.2 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev