Example #1
0
/*
* Routine Description:
*    Remove neighbor entry 
*
* Arguments:
*    [in] neighbor_entry - neighbor entry 
*
* Return Values:
*    SAI_STATUS_SUCCESS on success
*    Failure status code on error
*
* Note: IP address expected in Network Byte Order.
*/
sai_status_t sai_remove_neighbor_entry(
        _In_ const sai_neighbor_entry_t* neighbor_entry) {

    SAI_LOG_ENTER();

    sai_status_t status = SAI_STATUS_SUCCESS;
    switch_status_t switch_status = SWITCH_STATUS_SUCCESS;
    switch_api_neighbor_t api_neighbor;
    switch_handle_t neighbor_handle;

    if (!neighbor_entry) {
        status = SAI_STATUS_INVALID_PARAMETER;
        SAI_LOG_ERROR("null neighbor entry: %s",
                       sai_status_to_string(status));
        return status;
    }

    memset(&api_neighbor, 0, sizeof(switch_api_neighbor_t));
    sai_neighbor_entry_parse(neighbor_entry, &api_neighbor);
    sai_neighbor_entry_nexthop_get(&api_neighbor);

    neighbor_handle = switch_api_neighbor_handle_get(api_neighbor.nhop_handle);
    switch_status = switch_api_neighbor_entry_remove(device, neighbor_handle);
    status = sai_switch_status_to_sai_status(switch_status);
    if (status != SAI_STATUS_SUCCESS) {
        SAI_LOG_ERROR("failed to create neighbor entry: %s",
                       sai_status_to_string(status));
    }

    SAI_LOG_EXIT();

    return (sai_status_t) status;
}
Example #2
0
/*
* Routine Description:
*   Set port attribute value.
*
* Arguments:
*    [in] port_id - port id
*    [in] attr - attribute
*
* Return Values:
*    SAI_STATUS_SUCCESS on success
*    Failure status code on error
*/
sai_status_t sai_set_port_attribute(
        _In_ sai_object_id_t port_id, 
        _In_ const sai_attribute_t *attr) {

    SAI_LOG_ENTER(SAI_API_PORT);

    sai_status_t status = SAI_STATUS_SUCCESS;
    switch_handle_t vlan_handle = 0;
    switch_vlan_port_t switch_port;
    if(attr) {
        switch(attr->id) {
            //case SAI_PORT_ATTR_PORT_VLAN_ID:
            case SAI_PORT_ATTR_DEFAULT_VLAN:
                status = switch_api_vlan_id_to_handle_get((switch_vlan_t) attr->value.u16, &vlan_handle);
                switch_port.handle = (switch_handle_t)port_id;
                switch_port.tagging_mode = SWITCH_VLAN_PORT_UNTAGGED;
                status = switch_api_vlan_ports_add(device, vlan_handle, 1, &switch_port);
                break;
            default:
                // unsupported
                break;
        }
    }

    SAI_LOG_EXIT(SAI_API_PORT);

    return (sai_status_t) status;
}
Example #3
0
/**
 * @brief Create Policer
 *
 * @param[out] policer_id - the policer id
 * @param[in] attr_count - number of attributes
 * @param[in] attr_list - array of attributes
 *
 * @return SAI_STATUS_SUCCESS on success
 *         Failure status code on error
 */
sai_status_t sai_create_policer(_Out_ sai_object_id_t *policer_id,
                                _In_ uint32_t attr_count,
                                _In_ const sai_attribute_t *attr_list) {
  SAI_LOG_ENTER();

  sai_status_t status = SAI_STATUS_SUCCESS;
  switch_api_meter_t api_meter_info;

  if (!attr_list) {
    status = SAI_STATUS_INVALID_PARAMETER;
    SAI_LOG_ERROR("null attribute list: %s", sai_status_to_string(status));
    return status;
  }

  memset(&api_meter_info, 0, sizeof(switch_api_meter_t));
  sai_policer_attr_parse(attr_count, attr_list, &api_meter_info);
  *policer_id = switch_api_meter_create(device, &api_meter_info);
  status = (*policer_id == SWITCH_API_INVALID_HANDLE) ? SAI_STATUS_FAILURE
                                                      : SAI_STATUS_SUCCESS;

  if (status != SAI_STATUS_SUCCESS) {
    SAI_LOG_ERROR("failed to create policer: %s", sai_status_to_string(status));
  }

  SAI_LOG_EXIT();

  return (sai_status_t)status;
}
Example #4
0
/*
* Routine Description:
*    Get neighbor attribute value
*
* Arguments:
*    [in] neighbor_entry - neighbor entry
*    [in] attr_count - number of attributes
*    [inout] attrs - array of attributes
*
* Return Values:
*    SAI_STATUS_SUCCESS on success
*    Failure status code on error
*/
sai_status_t sai_get_neighbor_entry_attribute(
        _In_ const sai_neighbor_entry_t* neighbor_entry,
        _In_ uint32_t attr_count,
        _Inout_ sai_attribute_t *attr_list) {

    SAI_LOG_ENTER();

    sai_status_t status = SAI_STATUS_SUCCESS;

    if (!neighbor_entry) {
        status = SAI_STATUS_INVALID_PARAMETER;
        SAI_LOG_ERROR("null neighbor entry: %s",
                       sai_status_to_string(status));
        return status;
    }

    if (!attr_list) {
        status = SAI_STATUS_INVALID_PARAMETER;
        SAI_LOG_ERROR("null attribute: %s",
                       sai_status_to_string(status));
        return status;
    }

    SAI_LOG_EXIT();

    return (sai_status_t) status;
}
Example #5
0
/**
 * @brief Get the attribute of STP instance.
 *
 * @param[in] stp_id stp instance id
 * @param[in] attr_count number of the attribute
 * @param[in] attr_list attribute value
 * @return SAI_STATUS_SUCCESS if operation is successful otherwise a different
 *  error code is returned.
 */
sai_status_t sai_get_stp_port_state(
        _In_ sai_object_id_t stp_id,
        _In_ sai_object_id_t port_id,   
        _Out_ sai_port_stp_port_state_t *stp_port_state) {

    SAI_LOG_ENTER(SAI_API_STP);

    sai_status_t status = SAI_STATUS_SUCCESS;
    switch_stp_state_t switch_stp_state = SWITCH_PORT_STP_STATE_NONE;
    status = switch_api_stp_port_state_get(device, stp_id, port_id, &switch_stp_state);
    switch (switch_stp_state) {
        case SWITCH_PORT_STP_STATE_LEARNING:
            *stp_port_state = SAI_PORT_STP_STATE_LEARNING;
            break;
        case SWITCH_PORT_STP_STATE_FORWARDING:
            *stp_port_state = SAI_PORT_STP_STATE_FORWARDING;
            break;
        case SWITCH_PORT_STP_STATE_BLOCKING:
            *stp_port_state = SAI_PORT_STP_STATE_BLOCKING;
            break;
        default:
            *stp_port_state = 0;
    }

    SAI_LOG_EXIT(SAI_API_STP);

    return (sai_status_t) status;
}
Example #6
0
/**
 * @brief Create stp instance with default port state as forwarding.
 *
 * @param[out] stp_id stp instance id
 * @param[in] attr_count Number of attributes
 * @param[in] attr_list Value of attributes
 * @return SAI_STATUS_SUCCESS if operation is successful otherwise a different
 *  error code is returned.
 */
sai_status_t sai_create_stp_entry(
        _Out_ sai_object_id_t *stp_id,
        _In_  uint32_t attr_count,
        _In_  const sai_attribute_t *attr_list) {

    SAI_LOG_ENTER(SAI_API_STP);

    sai_status_t status = SAI_STATUS_SUCCESS;
    const sai_attribute_t *attribute;
    const sai_vlan_list_t *vlans;
    sai_vlan_id_t vlan_id = 0;
    uint32_t index1 = 0, index2 = 0;
    switch_handle_t *vlan_handle;
    *stp_id = (sai_object_id_t) switch_api_stp_group_create(device, 0);
    for (index1 = 0; index1 < attr_count; index1++) {
        attribute = &attr_list[index1];
        if (attribute->id == SAI_STP_ATTR_VLAN_LIST) {
            vlans = &attribute->value.vlanlist;
            vlan_handle = (switch_handle_t *) malloc(sizeof(switch_handle_t) * vlans->vlan_count);
            for (index2 = 0; index2 < vlans->vlan_count; index2++) {
                vlan_id = vlans->vlan_list[index2];
                switch_api_vlan_id_to_handle_get(vlan_id, &vlan_handle[index2]);
            }
            status = switch_api_stp_group_vlans_add(device, *stp_id, vlans->vlan_count, vlan_handle);
            free(vlan_handle);
        }
    }

    SAI_LOG_EXIT(SAI_API_STP);

    return (sai_status_t) status;
}
Example #7
0
/**
 * @brief Remove Qos Map
 *
 *  @param[in] qos_map_id Qos Map id to be removed.
 *
 *  @return  SAI_STATUS_SUCCESS on success
 *           Failure status code on error
 */
sai_status_t sai_remove_qos_map(_In_ sai_object_id_t qos_map_id) {
  SAI_LOG_ENTER();

  sai_status_t status = SAI_STATUS_SUCCESS;

  SAI_ASSERT(sai_object_type_query(qos_map_id) == SAI_OBJECT_TYPE_QOS_MAPS);

  status = switch_api_qos_map_ingress_delete(device, qos_map_id);
  if (status != SWITCH_STATUS_SUCCESS &&
      status != SWITCH_STATUS_INVALID_HANDLE) {
    SAI_LOG_ERROR("failed to remove ingress qos map %s",
                  sai_status_to_string(status));
    return status;
  }

  status = switch_api_qos_map_egress_delete(device, qos_map_id);
  if (status != SWITCH_STATUS_SUCCESS) {
    SAI_LOG_ERROR("failed to remove egress qos map %s",
                  sai_status_to_string(status));
    return status;
  }

  SAI_LOG_EXIT();

  return (sai_status_t)status;
}
Example #8
0
/**
 * @brief Create buffer profile
 * @param[out] buffer_profile_id buffer profile id
 * @param[in] attr_count number of attributes
 * @param[in] attr_list array of attributes
 * @return SAI_STATUS_SUCCESS on success
 *           Failure status code on error
 */
sai_status_t sai_create_buffer_profile(_Out_ sai_object_id_t *buffer_profile_id,
                                       _In_ uint32_t attr_count,
                                       _In_ const sai_attribute_t *attr_list) {
  SAI_LOG_ENTER();

  sai_status_t status = SAI_STATUS_SUCCESS;
  switch_api_buffer_profile_t buffer_profile_info;

  memset(&buffer_profile_info, 0x0, sizeof(buffer_profile_info));

  sai_buffer_profile_attribute_parse(
      attr_count, attr_list, &buffer_profile_info);
  *buffer_profile_id =
      switch_api_buffer_profile_create(device, &buffer_profile_info);

  status = (*buffer_profile_id == SWITCH_API_INVALID_HANDLE)
               ? SAI_STATUS_FAILURE
               : SAI_STATUS_SUCCESS;

  if (status != SAI_STATUS_SUCCESS) {
    SAI_LOG_ERROR("failed to create buffer pool: %s",
                  sai_status_to_string(status));
  }

  SAI_LOG_EXIT();

  return status;
}
Example #9
0
/*
* Routine Description:
*    Create virtual router
*
* Arguments:
*    [out] vr_id - virtual router id
*    [in] attr_count - number of attributes
*    [in] attr_list - array of attributes
*
* Return Values:
*  - SAI_STATUS_SUCCESS on success
*  - SAI_STATUS_ADDR_NOT_FOUND if neither SAI_SWITCH_ATTR_SRC_MAC_ADDRESS nor
*    SAI_VIRTUAL_ROUTER_ATTR_SRC_MAC_ADDRESS is set.
*/
sai_status_t sai_create_virtual_router_entry(
    _Out_ sai_object_id_t *vr_id,
    _In_ uint32_t attr_count,
    _In_ const sai_attribute_t *attr_list) {
  SAI_LOG_ENTER();

  sai_status_t status = SAI_STATUS_SUCCESS;
  switch_vrf_id_t vrf_id = 1;

  if (!attr_list) {
    status = SAI_STATUS_INVALID_PARAMETER;
    SAI_LOG_ERROR("null attribute list: %s", sai_status_to_string(status));
    return status;
  }

  sai_vrf_entry_attribute_parse(attr_count, attr_list);

  *vr_id = (sai_object_id_t)switch_api_vrf_create(device, vrf_id);

  status = (*vr_id == SWITCH_API_INVALID_HANDLE) ? SAI_STATUS_FAILURE
                                                 : SAI_STATUS_SUCCESS;

  if (status != SAI_STATUS_SUCCESS) {
    SAI_LOG_ERROR("failed to create virtual router entry : %s",
                  sai_status_to_string(status));
  }

  SAI_LOG_EXIT();

  return (sai_status_t)status;
}
Example #10
0
/**
 * @brief Create buffer pool
 * @param[out] pool_id buffer pool id
 * @param[in] attr_count number of attributes
 * @param[in] attr_list array of attributes
 * @return SAI_STATUS_SUCCESS on success
 *           Failure status code on error
 */
sai_status_t sai_create_buffer_pool(_Out_ sai_object_id_t *pool_id,
                                    _In_ uint32_t attr_count,
                                    _In_ const sai_attribute_t *attr_list) {
  SAI_LOG_ENTER();

  sai_status_t status = SAI_STATUS_SUCCESS;
  switch_direction_t direction = 0;
  uint32_t size = 0;

  sai_buffer_pool_attribute_parse(attr_count, attr_list, &direction, &size);

  *pool_id = switch_api_buffer_pool_create(device, direction, size);

  status = (*pool_id == SWITCH_API_INVALID_HANDLE) ? SAI_STATUS_FAILURE
                                                   : SAI_STATUS_SUCCESS;

  if (status != SAI_STATUS_SUCCESS) {
    SAI_LOG_ERROR("failed to create buffer pool: %s",
                  sai_status_to_string(status));
  }

  SAI_LOG_EXIT();

  return status;
}
Example #11
0
/*
 * Routine Description:
 *    Create IP multicast entry
 *
 * Arguments:
 *    [in] ipmc_entry - IP multicast entry
 *    [in] attr_count - number of attributes
 *    [in] attr_list - array of attributes
 *
 * Return Values:
 *    SAI_STATUS_SUCCESS on success
 *    Failure status code on error
 */
sai_status_t sai_create_ipmc_entry(_In_ const sai_ipmc_entry_t *ipmc_entry,
                                   _In_ uint32_t attr_count,
                                   _In_ const sai_attribute_t *attr_list) {
  SAI_LOG_ENTER();

  sai_status_t status = SAI_STATUS_SUCCESS;
  switch_status_t switch_status = SWITCH_STATUS_SUCCESS;
  switch_ip_addr_t src_addr, grp_addr;
  switch_handle_t vrf_handle = 0;
  switch_handle_t *oif_list_handle = 0;
  switch_handle_t *rpf_list_handle = 0;
  int oif_list_count = 0;
  int rpf_list_count = 0;
  int action = -1, pri = -1;
  switch_handle_t mcast_handle;
  char entry_string[SAI_MAX_ENTRY_STRING_LEN];

  if (!ipmc_entry) {
    status = SAI_STATUS_INVALID_PARAMETER;
    SAI_LOG_ERROR("null ipmc entry: %s", sai_status_to_string(status));
    return status;
  }

  if (!attr_list) {
    status = SAI_STATUS_INVALID_PARAMETER;
    SAI_LOG_ERROR("null attribute list: %s", sai_status_to_string(status));
    return status;
  }

  sai_ipmc_entry_parse(ipmc_entry, &vrf_handle, &src_addr, &grp_addr);
  sai_ipmc_entry_attribute_parse(attr_count,
                                 attr_list,
                                 &oif_list_handle,
                                 &oif_list_count,
                                 &rpf_list_handle,
                                 &rpf_list_count,
                                 &action,
                                 &pri);

  sai_ipmc_entry_to_string(ipmc_entry, entry_string);
  mcast_handle = sai_ipmc_tree_create(
      vrf_handle, &src_addr, &grp_addr, oif_list_count, oif_list_handle);
  status = sai_switch_status_to_sai_status(switch_status);

  switch_status = switch_api_multicast_mroute_add(device,
                                                  mcast_handle,
                                                  vrf_handle,
                                                  &src_addr,
                                                  &grp_addr,
                                                  1,
                                                  rpf_list_handle,
                                                  rpf_list_count);
  status = sai_switch_status_to_sai_status(switch_status);

  SAI_LOG_EXIT();

  return (sai_status_t)status;
}
Example #12
0
/**
 * @brief Retrieve stp state of a port in specified stp instance.
 *
 * @param[in] stp_id stp instance id
 * @param[in] port_id port id
 * @param[out] stp_port_state stp state of the port
 * @return SAI_STATUS_SUCCESS if operation is successful otherwise a different
 *  error code is returned.
 */
sai_status_t sai_get_stp_entry_attribute(
        _In_ sai_object_id_t stp_id,
        _In_ uint32_t attr_count,
        _Inout_ sai_attribute_t *attr_list) {

    SAI_LOG_ENTER(SAI_API_STP);

    SAI_LOG_EXIT(SAI_API_STP);

    return 0;
}
Example #13
0
/*
    \brief Remove LAG
    \param[in] lag_id LAG id
    \return Success: SAI_STATUS_SUCCESS
            Failure: Failure status code on error
*/
sai_status_t sai_remove_lag_entry(
        _In_ sai_object_id_t lag_id) {

    SAI_LOG_ENTER(SAI_API_LAG);

    sai_status_t status = SAI_STATUS_SUCCESS;
    status = switch_api_lag_delete(device, (switch_handle_t) lag_id);

    SAI_LOG_EXIT(SAI_API_LAG);

    return (sai_status_t) status;
}
Example #14
0
sai_status_t sai_set_qos_map_attribute(_In_ sai_object_id_t qos_map_id,
                                       _In_ const sai_attribute_t *attr) {
  SAI_LOG_ENTER();

  sai_status_t status = SAI_STATUS_SUCCESS;

  SAI_ASSERT(sai_object_type_query(qos_map_id) == SAI_OBJECT_TYPE_QOS_MAPS);

  SAI_LOG_EXIT();

  return (sai_status_t)status;
}
Example #15
0
/**
 * @brief Set buffer pool attribute
 * @param[in] pool_id buffer pool id
 * @param[in] attr attribute
 * @return SAI_STATUS_SUCCESS on success
 *           Failure status code on error
 */
sai_status_t sai_set_buffer_pool_attribute(_In_ sai_object_id_t pool_id,
                                           _In_ const sai_attribute_t *attr) {
  SAI_LOG_ENTER();

  sai_status_t status = SAI_STATUS_SUCCESS;

  SAI_ASSERT(sai_object_type_query(pool_id) == SAI_OBJECT_TYPE_BUFFER_POOL);

  SAI_LOG_EXIT();

  return status;
}
Example #16
0
/*
    \brief Set LAG Attribute
    \param[in] lag_id LAG id
    \param[in] attr Structure containing ID and value to be set
    \return Success: SAI_STATUS_SUCCESS
            Failure: Failure status code on error
*/
sai_status_t sai_set_lag_entry_attribute(
        _In_ sai_object_id_t lag_id,
        _In_ const sai_attribute_t *attr) {

    SAI_LOG_ENTER(SAI_API_LAG);

    sai_status_t status = SAI_STATUS_SUCCESS;

    SAI_LOG_EXIT(SAI_API_LAG);

    return (sai_status_t) status;
}
Example #17
0
/**
 * @brief Get ingress priority group attributes
 * @param[in] ingress_pg_id ingress priority group id
 * @param[in] attr_count number of attributes
 * @param[inout] attr_list array of attributes
 *
 * @return  SAI_STATUS_SUCCESS on success
 *           Failure status code on error
 */
sai_status_t sai_get_ingress_priority_group_attribute(
    _In_ sai_object_id_t ingress_pg_id,
    _In_ uint32_t attr_count,
    _Inout_ sai_attribute_t *attr_list) {
  SAI_LOG_ENTER();

  sai_status_t status = SAI_STATUS_SUCCESS;

  SAI_LOG_EXIT();

  return status;
}
Example #18
0
/*
    \brief Get LAG Attribute
    \param[in] lag_id LAG id
    \param[in] attr_count Number of attributes to be get
    \param[in,out] attr_list List of structures containing ID and value to be get
    \return Success: SAI_STATUS_SUCCESS
            Failure: Failure status code on error
*/
sai_status_t sai_get_lag_entry_attribute(
        _In_ sai_object_id_t lag_id,
        _In_ uint32_t attr_count,
        _Inout_ sai_attribute_t *attr_list) {

    SAI_LOG_ENTER(SAI_API_LAG);

    sai_status_t status = SAI_STATUS_SUCCESS;

    SAI_LOG_EXIT(SAI_API_LAG);

    return (sai_status_t) status;
}
Example #19
0
/*
* Routine Description:
*   Get port statistics counters.
*
* Arguments:
*    [in] port_id - port id
*    [in] counter_ids - specifies the array of counter ids
*    [in] number_of_counters - number of counters in the array
*    [out] counters - array of resulting counter values.
*
* Return Values:
*    SAI_STATUS_SUCCESS on success
*    Failure status code on error
*/ 
sai_status_t sai_get_port_stats(
        _In_ sai_object_id_t port_id, 
        _In_ const sai_port_stat_counter_t *counter_ids,
        _In_ uint32_t number_of_counters,
        _Out_ uint64_t* counters) {

    SAI_LOG_ENTER();

    sai_status_t status = SAI_STATUS_SUCCESS;

    SAI_LOG_EXIT();

    return (sai_status_t) status;
}
Example #20
0
/*
* Routine Description:
*    Set router interface attribute
*
* Arguments:
*    [in] rif_id - router interface id
*    [in] attr - attribute
*
* Return Values:
*    SAI_STATUS_SUCCESS on success
*    Failure status code on error
*/
sai_status_t sai_set_router_interface_attribute(
    _In_ sai_object_id_t rif_id, _In_ const sai_attribute_t *attr) {
  SAI_LOG_ENTER();

  sai_status_t status = SAI_STATUS_SUCCESS;
  switch_status_t switch_status = SWITCH_STATUS_SUCCESS;

  if (!attr) {
    status = SAI_STATUS_INVALID_PARAMETER;
    SAI_LOG_ERROR("null attribute: %s", sai_status_to_string(status));
    return status;
  }

  SAI_ASSERT(sai_object_type_query(rif_id) == SAI_OBJECT_TYPE_ROUTER_INTERFACE);

  switch (attr->id) {
    case SAI_ROUTER_INTERFACE_ATTR_ADMIN_V4_STATE:
      switch_status = switch_api_interface_ipv4_unicast_enabled_set(
          rif_id, attr->value.booldata);
      break;
    case SAI_ROUTER_INTERFACE_ATTR_ADMIN_V6_STATE:
      switch_status = switch_api_interface_ipv6_unicast_enabled_set(
          rif_id, attr->value.booldata);
      break;
    case SAI_ROUTER_INTERFACE_ATTR_ADMIN_V4_MULTICAST_STATE:
      switch_status = switch_api_interface_ipv4_multicast_enabled_set(
          rif_id, attr->value.booldata);
      break;
    case SAI_ROUTER_INTERFACE_ATTR_ADMIN_V6_MULTICAST_STATE:
      switch_status = switch_api_interface_ipv6_multicast_enabled_set(
          rif_id, attr->value.booldata);
      break;
    case SAI_ROUTER_INTERFACE_ATTR_V4_URPF_MODE:
      switch_status = switch_api_interface_ipv4_urpf_mode_set(
          rif_id, sai_to_switch_urpf_mode(attr->value.s32));
      break;
    case SAI_ROUTER_INTERFACE_ATTR_V6_URPF_MODE:
      switch_status = switch_api_interface_ipv6_urpf_mode_set(
          rif_id, sai_to_switch_urpf_mode(attr->value.s32));
      break;
    default:
      return SAI_STATUS_INVALID_PARAMETER;
  }

  SAI_LOG_EXIT();

  status = sai_switch_status_to_sai_status(switch_status);
  return status;
}
Example #21
0
/**
 * @brief Get buffer profile attributes
 * @param[in] buffer_profile_id buffer profile id
 * @param[in] attr_count number of attributes
 * @param[inout] attr_list array of attributes
 * @return SAI_STATUS_SUCCESS on success
 *           Failure status code on error
 */
sai_status_t sai_get_buffer_profile_attribute(
    _In_ sai_object_id_t buffer_profile_id,
    _In_ uint32_t attr_count,
    _Inout_ sai_attribute_t *attr_list) {
  SAI_LOG_ENTER();

  sai_status_t status = SAI_STATUS_SUCCESS;

  SAI_ASSERT(sai_object_type_query(buffer_profile_id) ==
             SAI_OBJECT_TYPE_BUFFER_PROFILE);

  SAI_LOG_EXIT();

  return status;
}
Example #22
0
/**
 * @brief Remove buffer pool
 * @param[in] pool_id buffer pool id
 * @return SAI_STATUS_SUCCESS on success
 *           Failure status code on error
 */
sai_status_t sai_remove_buffer_pool(_In_ sai_object_id_t pool_id) {
  SAI_LOG_ENTER();

  sai_status_t status = SAI_STATUS_SUCCESS;

  SAI_ASSERT(sai_object_type_query(pool_id) == SAI_OBJECT_TYPE_BUFFER_POOL);

  status = switch_api_buffer_pool_delete(device, pool_id);
  if (status != SAI_STATUS_SUCCESS) {
    SAI_LOG_ERROR("failed to delete buffer pool: %s",
                  sai_status_to_string(status));
  }

  SAI_LOG_EXIT();

  return status;
}
Example #23
0
/*
* Routine Description:
*    Create neighbor entry 
*
* Arguments:
*    [in] neighbor_entry - neighbor entry 
*    [in] attr_count - number of attributes
*    [in] attrs - array of attributes
*
* Return Values:
*    SAI_STATUS_SUCCESS on success
*    Failure status code on error
*
* Note: IP address expected in Network Byte Order.
*/
sai_status_t sai_create_neighbor_entry(
        _In_ const sai_neighbor_entry_t* neighbor_entry,
        _In_ uint32_t attr_count,
        _In_ const sai_attribute_t *attr_list) {

    SAI_LOG_ENTER();

    sai_status_t status = SAI_STATUS_SUCCESS;
    switch_handle_t neighbor_handle = SWITCH_API_INVALID_HANDLE;
    char entry_string[SAI_MAX_ENTRY_STRING_LEN];
    switch_api_neighbor_t api_neighbor;

    if (!neighbor_entry) {
        status = SAI_STATUS_INVALID_PARAMETER;
        SAI_LOG_ERROR("null neighbor entry: %s",
                       sai_status_to_string(status));
        return status;
    }

    if (!attr_list) {
        status = SAI_STATUS_INVALID_PARAMETER;
        SAI_LOG_ERROR("null attribute list: %s",
                       sai_status_to_string(status));
        return status;
    }

    memset(&api_neighbor, 0, sizeof(switch_api_neighbor_t));
    sai_neighbor_entry_parse(neighbor_entry, &api_neighbor);
    sai_neighbor_entry_attribute_parse(attr_count, attr_list, &api_neighbor);
    sai_neighbor_entry_nexthop_get(&api_neighbor);

    sai_neighbor_entry_to_string(neighbor_entry, entry_string);

    neighbor_handle = switch_api_neighbor_entry_add(device, &api_neighbor);
    status = neighbor_handle == SWITCH_API_INVALID_HANDLE ?
             SAI_STATUS_FAILURE :
             SAI_STATUS_SUCCESS;
    if (status != SAI_STATUS_SUCCESS) {
        SAI_LOG_ERROR("failed to create neighbor entry: %s",
                       sai_status_to_string(status));
    }

    SAI_LOG_EXIT();

    return (sai_status_t) status;
}
Example #24
0
/**
 * @brief  Set Policer attribute
 *
 * @param[in] policer_id - Policer id
 * @param[in] attr - attribute
 *
 * @return SAI_STATUS_SUCCESS on success
 *        Failure status code on error
 */
sai_status_t sai_set_policer_attribute(_In_ sai_object_id_t policer_id,
                                       _In_ const sai_attribute_t *attr) {
  SAI_LOG_ENTER();

  sai_status_t status = SAI_STATUS_SUCCESS;

  if (!attr) {
    status = SAI_STATUS_INVALID_PARAMETER;
    SAI_LOG_ERROR("null attribute: %s", sai_status_to_string(status));
    return status;
  }

  SAI_ASSERT(sai_object_type_query(policer_id) == SAI_OBJECT_TYPE_POLICER);

  SAI_LOG_EXIT();
  return (sai_status_t)status;
}
Example #25
0
/**
 * @brief Create Qos Map
 *
 * @param[out] qos_map_id Qos Map Id
 * @param[in] attr_count number of attributes
 * @param[in] attr_list array of attributes
 *
 * @return  SAI_STATUS_SUCCESS on success
 *          Failure status code on error
 */
sai_status_t sai_create_qos_map(_Out_ sai_object_id_t *qos_map_id,
                                _In_ uint32_t attr_count,
                                _In_ const sai_attribute_t *attr_list) {
  SAI_LOG_ENTER();

  sai_status_t status = SAI_STATUS_SUCCESS;
  uint32_t num_entries = 0;
  switch_qos_map_t *switch_qos_map_list = NULL;
  switch_direction_t direction = 0;
  switch_qos_map_ingress_t ingress_qos_map_type = 0;
  switch_qos_map_egress_t egress_qos_map_type = 0;

  status = sai_qos_map_attribute_parse(attr_count,
                                       attr_list,
                                       &direction,
                                       &ingress_qos_map_type,
                                       &egress_qos_map_type,
                                       &num_entries,
                                       &switch_qos_map_list);
  if (status != SAI_STATUS_SUCCESS) {
    SAI_LOG_ERROR("qos map attribute parse failed %s",
                  sai_status_to_string(status));
    return status;
  }

  if (direction == SWITCH_API_DIRECTION_INGRESS) {
    *qos_map_id = switch_api_qos_map_ingress_create(
        device, ingress_qos_map_type, num_entries, switch_qos_map_list);
  } else {
    *qos_map_id = switch_api_qos_map_egress_create(
        device, egress_qos_map_type, num_entries, switch_qos_map_list);
  }

  status = (*qos_map_id == SWITCH_API_INVALID_HANDLE) ? SAI_STATUS_FAILURE
                                                      : SAI_STATUS_SUCCESS;

  if (status != SAI_STATUS_SUCCESS) {
    SAI_LOG_ERROR("failed to create qos map group: %s",
                  sai_status_to_string(status));
  }

  SAI_LOG_EXIT();

  return (sai_status_t)status;
}
Example #26
0
/*
* Routine Description:
*    Set virtual router attribute Value
*
* Arguments:
*    [in] vr_id - virtual router id
*    [in] attr - attribute
*
* Return Values:
*    SAI_STATUS_SUCCESS on success
*    Failure status code on error
*/
sai_status_t sai_set_virtual_router_entry_attribute(
    _In_ sai_object_id_t vr_id, _In_ const sai_attribute_t *attr) {
  SAI_LOG_ENTER();

  sai_status_t status = SAI_STATUS_SUCCESS;

  if (!attr) {
    status = SAI_STATUS_INVALID_PARAMETER;
    SAI_LOG_ERROR("null attribute: %s", sai_status_to_string(status));
    return status;
  }

  SAI_ASSERT(sai_object_type_query(vr_id) == SAI_OBJECT_TYPE_VIRTUAL_ROUTER);

  SAI_LOG_EXIT();

  return (sai_status_t)status;
}
Example #27
0
/*
* Routine Description:
*    Remove virtual router
*
* Arguments:
*    [in] vr_id - virtual router id
*
* Return Values:
*    SAI_STATUS_SUCCESS on success
*    Failure status code on error
*/
sai_status_t sai_remove_virtual_router_entry(_In_ sai_object_id_t vr_id) {
  SAI_LOG_ENTER();

  sai_status_t status = SAI_STATUS_SUCCESS;
  switch_status_t switch_status = SWITCH_STATUS_SUCCESS;

  SAI_ASSERT(sai_object_type_query(vr_id) == SAI_OBJECT_TYPE_VIRTUAL_ROUTER);

  switch_status = switch_api_vrf_delete(device, vr_id);
  status = sai_switch_status_to_sai_status(switch_status);

  if (status != SAI_STATUS_SUCCESS) {
    SAI_LOG_ERROR("failed to remove virtual router entry %lx : %s",
                  vr_id,
                  sai_status_to_string(status));
  }

  SAI_LOG_EXIT();
  return (sai_status_t)status;
}
Example #28
0
/*
* Routine Description:
*    Remove router interface
*
* Arguments:
*    [in] rif_id - router interface id
*
* Return Values:
*    SAI_STATUS_SUCCESS on success
*    Failure status code on error
*/
sai_status_t sai_remove_router_interface(_In_ sai_object_id_t rif_id) {
  SAI_LOG_ENTER();

  sai_status_t status = SAI_STATUS_SUCCESS;
  switch_status_t switch_status = SWITCH_STATUS_SUCCESS;

  SAI_ASSERT(sai_object_type_query(rif_id) == SAI_OBJECT_TYPE_ROUTER_INTERFACE);

  switch_status = switch_api_interface_delete(device, (switch_handle_t)rif_id);
  status = sai_switch_status_to_sai_status(switch_status);

  if (status != SAI_STATUS_SUCCESS) {
    SAI_LOG_ERROR("failed to remove router interface: %s",
                  sai_status_to_string(status));
  }

  SAI_LOG_EXIT();

  return (sai_status_t)status;
}
Example #29
0
/**
 * @brief Delete policer
 *
 * @param[in] policer_id - Policer id
 *
 * @return  SAI_STATUS_SUCCESS on success
 *         Failure status code on error
 */
sai_status_t sai_remove_policer(_In_ sai_object_id_t policer_id) {
  SAI_LOG_ENTER();

  sai_status_t status = SAI_STATUS_SUCCESS;
  switch_status_t switch_status = SWITCH_STATUS_SUCCESS;

  SAI_ASSERT(sai_object_type_query(policer_id) == SAI_OBJECT_TYPE_POLICER);

  switch_status = switch_api_meter_delete(device, policer_id);
  status = sai_switch_status_to_sai_status(switch_status);
  if (status != SAI_STATUS_SUCCESS) {
    SAI_LOG_ERROR("failed to delete policer %lx: %s",
                  policer_id,
                  sai_status_to_string(status));
  }

  SAI_LOG_EXIT();

  return (sai_status_t)status;
}
Example #30
0
/*
    \brief Remove ports from LAG.
    \param[in] lag_id LAG id
    \param[in] port_count number of ports
    \param[in] port_list pointer to membership structures
    \return Success: SAI_STATUS_SUCCESS
            Failure: Failure status code on error
*/
sai_status_t sai_remove_ports_from_lag(
        _In_ sai_object_id_t lag_id,
        _In_ const sai_object_list_t *port_list) {

    SAI_LOG_ENTER(SAI_API_LAG);

    sai_status_t status = SAI_STATUS_SUCCESS;
    switch_direction_t direction = SWITCH_API_DIRECTION_BOTH;
    uint32_t index = 0;
    for (index = 0; index < port_list->count; index++) {
        status = switch_api_lag_member_delete(device,
                        (switch_handle_t) lag_id,
                        direction,
                        port_list->list[index]);
    }

    SAI_LOG_EXIT(SAI_API_LAG);

    return (sai_status_t) status;
}