/* Delete port to the bridge. */ lagopus_result_t bridge_port_delete(struct bridge_list *bridge_list, const char *name, uint32_t portid) { struct bridge *bridge; struct port *port; lagopus_result_t ret; flowdb_wrlock(NULL); /* Lookup bridge by name. */ bridge = bridge_lookup(bridge_list, name); if (bridge != NULL) { port = ifindex2port(bridge->ports, portid); if (port != NULL && port->bridge == bridge) { printf("Release port id %u from bridge %s\n", port->ifindex, bridge->name); vector_set_index(bridge->ports, port->ofp_port.port_no, NULL); send_port_status(port, OFPPR_DELETE); port->bridge = NULL; ret = LAGOPUS_RESULT_OK; } else { ret = LAGOPUS_RESULT_NOT_FOUND; } } else { ret = LAGOPUS_RESULT_NOT_FOUND; } flowdb_wrunlock(NULL); return ret; }
/** * Change physical port state. * * @param[in] port physical port. * * @retval LAGOPUS_RESULT_OK success. */ static lagopus_result_t lagopus_change_physical_port(struct port *port) { if (port->interface != NULL) { dp_interface_change_config(port->interface, port->ofp_port.advertised, port->ofp_port.config); } send_port_status(port, OFPPR_MODIFY); return LAGOPUS_RESULT_OK; }
/* Add port to the bridge. */ lagopus_result_t bridge_port_add(struct bridge_list *bridge_list, const char *name, struct port *port) { struct bridge *bridge; lagopus_result_t ret; flowdb_wrlock(NULL); /* Lookup bridge by name. */ bridge = bridge_lookup(bridge_list, name); if (bridge != NULL) { /* Set port to the bridge's port vector. */ printf("Assigning port id %u to bridge %s\n", port->ifindex, bridge->name); vector_set_index(bridge->ports, port->ofp_port.port_no, port); port->bridge = bridge; send_port_status(port, OFPPR_ADD); ret = LAGOPUS_RESULT_OK; } else { ret = LAGOPUS_RESULT_NOT_FOUND; } flowdb_wrunlock(NULL); return ret; }