Exemple #1
0
/* Add a new bridge. */
lagopus_result_t
bridge_add(struct bridge_list *bridge_list, const char *name, uint64_t dpid) {
  struct bridge *bridge;

  /* Find bridge. */
  bridge = bridge_lookup(bridge_list, name);
  if (bridge != NULL) {
    return LAGOPUS_RESULT_ALREADY_EXISTS;
  }

  /* Allocate a new bridge. */
  bridge = bridge_alloc(name);
  if (bridge == NULL) {
    return LAGOPUS_RESULT_NO_MEMORY;
  }

  /* If given dpid is zero, generate random dpid value. */
  if (dpid == 0) {
    dpid = bridge_dpid_generate();
  }
  bridge->dpid = dpid;

  flowdb_wrlock(NULL);
  TAILQ_INSERT_TAIL(bridge_list, bridge, entry);
  flowdb_wrunlock(NULL);

  lagopus_msg_info("Bridge %s dpid:%0" PRIx64 " is added\n", name, dpid);
  return LAGOPUS_RESULT_OK;
}
Exemple #2
0
static void *bridge_clone(struct rtnl_link *link, void *data)
{
	struct bridge_data *bd;

	if ((bd = bridge_alloc(link)))
		memcpy(bd, data, sizeof(*bd));

	return bd;
}
Exemple #3
0
struct ast_bridge *bridge_stasis_new(uint32_t capabilities, unsigned int flags, const char *name, const char *id)
{
    void *bridge;

    bridge = bridge_alloc(sizeof(struct ast_bridge), &bridge_stasis_v_table);
    bridge = bridge_base_init(bridge, capabilities, flags, "Stasis", name, id);
    bridge = bridge_register(bridge);

    return bridge;
}
Exemple #4
0
struct ast_bridge *bridge_parking_new(struct parking_lot *bridge_lot)
{
	void *bridge;

	bridge = bridge_alloc(sizeof(struct ast_bridge_parking), &ast_bridge_parking_v_table);
	bridge = bridge_base_init(bridge, AST_BRIDGE_CAPABILITY_HOLDING,
		AST_BRIDGE_FLAG_MERGE_INHIBIT_TO | AST_BRIDGE_FLAG_MERGE_INHIBIT_FROM
		| AST_BRIDGE_FLAG_SWAP_INHIBIT_FROM,  "Parking", bridge_lot->name, NULL);
	bridge = ast_bridge_parking_init(bridge, bridge_lot);
	bridge = bridge_register(bridge);
	return bridge;
}