Пример #1
0
static void
dpdk_interface_unset_index(struct interface *ifp) {
  if (ifp_vector == NULL) {
    return;
  }
  vector_set_index(ifp_vector, ifp->info.eth_dpdk_phy.port_number, NULL);
}
Пример #2
0
static void
dpdk_interface_set_index(struct interface *ifp) {
  if (ifp_vector == NULL) {
    ifp_vector = vector_alloc();
  }
  vector_set_index(ifp_vector, ifp->info.eth_dpdk_phy.port_number, ifp);
}
Пример #3
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;
}
Пример #4
0
/* Install top node of command vector. */
void
install_node (struct cmd_node *node, 
	      int (*func) (struct vty *))
{
  vector_set_index (cmdvec, node->node, node);
  node->func = func;
  node->cmd_vector = vector_init (VECTOR_MIN_SIZE);
}
Пример #5
0
/* Generic CLI Installation. */
int
cli_install_gen (struct cli_tree *ctree, int mode,
                 u_char privilege, u_int16_t flags, struct cli_element *cel)
{
  struct cli_builder cb;
  struct cli_node *node;
  vector parent;
  int index, max;

  /* Set flags. */
  if (flags)
    SET_FLAG (cel->flags, flags);

  /* Check help string is there.  */
  cli_check_help (cel, &index, &max);

  if (mode > MAX_MODE)
    return -1;

  /* Lookup root node.  */
  node = vector_lookup_index (ctree->modes, mode);

  /* Install a new root node.  */
  if (! node)
    {
      node = cli_node_new ();
      vector_set_index (ctree->modes, mode, node);
    }

  /* Update IFNAME token and help string.  */
  if (ifname_expand_token)
    cli_ifname_reflect (cel, index, max);

  /* Set initial value before calling cli_build().  */
  parent = vector_init (VECTOR_MIN_SIZE);
  vector_set (parent, node);
  cb.str = cel->str;
  cb.index = 0;

  cli_build (parent, NULL, NULL, &cb, cel, privilege, 0);

  vector_free (parent);

  return 0;
}
Пример #6
0
struct config *
config_get (int index, char *line)
{
  struct config *config;
  struct config *config_loop;
  struct list *master;
  struct listnode *nn;

  config = config_loop = NULL;

  master = vector_lookup_ensure (configvec, index);

  if (! master)
    {
      master = list_new ();
      master->del = (void (*) (void *))config_del;
      master->cmp = (int (*)(void *, void *)) config_cmp;
      vector_set_index (configvec, index, master);
    }
  
  LIST_LOOP (master, config_loop, nn)
    {
      if (strcmp (config_loop->name, line) == 0)
	config = config_loop;
    }

  if (! config)
    {
      config = config_new ();
      config->line = list_new ();
      config->line->del = (void (*) (void *))line_del;
      config->line->cmp = (int (*)(void *, void *)) line_cmp;
      config->name = XSTRDUP (MTYPE_VTYSH_CONFIG_LINE, line);
      config->index = index;
      listnode_add (master, config);
    }
  return config;
}
Пример #7
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;
}