Exemplo n.º 1
0
switchlink_db_status_t switchlink_db_port_get_all_ports(
    uint16_t *num_ports, switchlink_db_port_obj_t **port_map) {
  *num_ports =
      sizeof(switchlink_db_port_map) / sizeof(switchlink_db_port_obj_t);
  *port_map = switchlink_malloc(sizeof(switchlink_db_port_obj_t), *num_ports);
  memcpy(*port_map, switchlink_db_port_map, sizeof(switchlink_db_port_map));
  return SWITCHLINK_DB_STATUS_SUCCESS;
}
Exemplo n.º 2
0
switchlink_db_status_t
switchlink_db_route_add(switchlink_db_route_info_t *route_info) {
    switchlink_db_route_obj_t * obj =
        switchlink_malloc(sizeof(switchlink_db_route_obj_t), 1);
    memcpy(&(obj->route_info), route_info, sizeof(switchlink_db_route_info_t));
    tommy_list_insert_tail(&switchlink_db_route_obj_list, &obj->list_node, obj);
    return SWITCHLINK_DB_STATUS_SUCCESS;
}
Exemplo n.º 3
0
switchlink_db_status_t
switchlink_db_bridge_add(uint32_t ifindex,
                         switchlink_db_bridge_info_t *bridge) {
    switchlink_db_bridge_obj_t * obj =
        switchlink_malloc(sizeof(switchlink_db_bridge_obj_t), 1);
    obj->ifindex = ifindex;
    memcpy(&(obj->bridge), bridge, sizeof(switchlink_db_bridge_info_t));
    tommy_trie_inplace_insert(&switchlink_db_bridge_obj_map, &obj->node, obj,
                              obj->ifindex);
    return SWITCHLINK_DB_STATUS_SUCCESS;
}
Exemplo n.º 4
0
switchlink_db_status_t
switchlink_db_ecmp_add(switchlink_db_ecmp_info_t *ecmp_info) {
    assert(ecmp_info->num_nhops < SWITCHLINK_ECMP_NUM_MEMBERS_MAX);
    switchlink_db_ecmp_obj_t * obj =
        switchlink_malloc(sizeof(switchlink_db_ecmp_obj_t), 1);
    memcpy(&(obj->ecmp_info), ecmp_info, sizeof(switchlink_db_ecmp_info_t));
    obj->ref_count = 0;
    tommy_list_insert_tail(&switchlink_db_ecmp_obj_list, &obj->list_node, obj);
    tommy_trie_inplace_insert(&switchlink_db_handle_obj_map,
                              &obj->handle_node, obj, obj->ecmp_info.ecmp_h);
    return SWITCHLINK_DB_STATUS_SUCCESS;
}
Exemplo n.º 5
0
switchlink_db_status_t
switchlink_db_interface_add(uint32_t ifindex,
                            switchlink_db_interface_info_t *intf_info) {
    switchlink_db_intf_obj_t * obj =
        switchlink_malloc(sizeof(switchlink_db_intf_obj_t), 1);
    obj->ifindex = ifindex;
    memcpy(&(obj->intf_info), intf_info,
           sizeof(switchlink_db_interface_info_t));
    tommy_trie_inplace_insert(&switchlink_db_interface_obj_map,
                              &obj->ifindex_node, obj, obj->ifindex);
    tommy_trie_inplace_insert(&switchlink_db_handle_obj_map,
                              &obj->handle_node, obj, obj->intf_info.intf_h);
    return SWITCHLINK_DB_STATUS_SUCCESS;
}
Exemplo n.º 6
0
switchlink_db_status_t
switchlink_db_oifl_add(switchlink_db_oifl_info_t *oifl_info) {
    static switchlink_handle_t s_oifl_h = 1;
    assert(oifl_info->num_intfs < SWITCHLINK_OIFL_NUM_MEMBERS_MAX);
    switchlink_db_oifl_obj_t * obj =
        switchlink_malloc(sizeof(switchlink_db_oifl_obj_t), 1);
    oifl_info->oifl_h = (s_oifl_h++ & ~SWITCHLINK_HANDLE_TYPE_OIFL) |
        SWITCHLINK_HANDLE_TYPE_OIFL;
    memcpy(&(obj->oifl_info), oifl_info, sizeof(switchlink_db_oifl_info_t));
    obj->ref_count = 0;
    tommy_list_insert_tail(&switchlink_db_oifl_obj_list, &obj->list_node, obj);
    tommy_trie_inplace_insert(&switchlink_db_handle_obj_map,
                              &obj->handle_node, obj, obj->oifl_info.oifl_h);
    return SWITCHLINK_DB_STATUS_SUCCESS;
}
Exemplo n.º 7
0
switchlink_db_status_t switchlink_db_mac_add(switchlink_mac_addr_t mac_addr,
                                             switchlink_handle_t bridge_h,
                                             switchlink_handle_t intf_h) {
  switchlink_db_mac_obj_t *obj =
      switchlink_malloc(sizeof(switchlink_db_mac_obj_t), 1);
  memcpy(obj->addr, mac_addr, sizeof(switchlink_mac_addr_t));
  obj->bridge_h = bridge_h;
  obj->intf_h = intf_h;

  uint32_t hash;
  uint8_t key[SWITCHLINK_MAC_KEY_LEN];
  switchlink_db_mac_key_hash(mac_addr, bridge_h, key, &hash);
  tommy_hashlin_insert(&switchlink_db_mac_obj_hash, &obj->hash_node, obj, hash);
  tommy_list_insert_tail(&switchlink_db_mac_obj_list, &obj->list_node, obj);
  return SWITCHLINK_DB_STATUS_SUCCESS;
}
Exemplo n.º 8
0
static void get_port_list() {
  sai_status_t status = SAI_STATUS_SUCCESS;
  sai_attribute_t port_attr;

  memset(&port_attr, 0, sizeof(port_attr));
  port_attr.id = SAI_SWITCH_ATTR_CPU_PORT;
  status = switch_api->get_switch_attribute(1, &port_attr);
  assert(status == SAI_STATUS_SUCCESS);
  s_cpu_port = port_attr.value.oid;

  memset(&port_attr, 0, sizeof(port_attr));
  port_attr.id = SAI_SWITCH_ATTR_PORT_NUMBER;
  status = switch_api->get_switch_attribute(1, &port_attr);
  assert(status == SAI_STATUS_SUCCESS);
  s_max_ports = port_attr.value.u32;

  memset(&port_attr, 0, sizeof(port_attr));
  port_attr.id = SAI_SWITCH_ATTR_PORT_LIST;
  s_port_list = (sai_object_id_t *)switchlink_malloc(sizeof(sai_object_id_t),
                                                     s_max_ports);
  port_attr.value.objlist.list = s_port_list;
  status = switch_api->get_switch_attribute(1, &port_attr);
  assert(status == SAI_STATUS_SUCCESS);
}