Example #1
0
/* 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;
}
Example #2
0
/**
 * 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;
}
Example #3
0
/* 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;
}