Exemple #1
0
static void
port_desc_set(of_port_desc_t *of_port_desc, of_port_no_t of_port_num)
{
    struct ind_ovs_port *port = ind_ovs_ports[of_port_num];
    assert(port != NULL);

    of_port_desc_port_no_set(of_port_desc, of_port_num);
    of_port_desc_hw_addr_set(of_port_desc, port->mac_addr);
    of_port_desc_name_set(of_port_desc, port->ifname);
    of_port_desc_config_set(of_port_desc, port->config);

    uint32_t state = 0;
    if (!(port->ifflags & IFF_UP)) {
        state |= OF_PORT_STATE_FLAG_LINK_DOWN;
    }
    of_port_desc_state_set(of_port_desc, state);

    uint32_t curr, advertised, supported, peer;
    ind_ovs_get_interface_features(port->ifname, &curr, &advertised,
        &supported, &peer, of_port_desc->version);

    of_port_desc_curr_set(of_port_desc, curr);
    of_port_desc_advertised_set(of_port_desc, advertised);
    of_port_desc_supported_set(of_port_desc, supported);
    of_port_desc_peer_set(of_port_desc, peer);
}
Exemple #2
0
/* Generated from of10/port_status.data */
static int
test_of10_port_status(void) {
    uint8_t binary[] = {
        0x01, 0x0c, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 
        0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
        0xff, 0xfd, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 
        0x66, 0x6f, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
        0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x00, 
        0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 
        0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 
        
    };

    of_object_t *obj;

    obj = of_port_status_new(OF_VERSION_1_0);
    {
        of_object_t *desc = of_port_desc_new(OF_VERSION_1_0);
        of_port_desc_advertised_set(desc, 32);
        of_port_desc_config_set(desc, 16);
        of_port_desc_curr_set(desc, 1);
        {
    	of_mac_addr_t hw_addr = { { 1, 2, 3, 4, 5, 6 } };
    	of_port_desc_hw_addr_set(desc, hw_addr);
        }
        {
    	of_port_name_t name = "foo";
    	of_port_desc_name_set(desc, name);
        }
        of_port_desc_peer_set(desc, 2048);
        of_port_desc_port_no_set(desc, 65533);
        of_port_desc_state_set(desc, 512);
        of_port_desc_supported_set(desc, 512);
        of_port_status_desc_set(obj, desc);
        of_object_delete(desc);
    }
    of_port_status_reason_set(obj, 1);
    of_port_status_xid_set(obj, 4);

    if (sizeof(binary) != WBUF_CURRENT_BYTES(OF_OBJECT_TO_WBUF(obj))
        || memcmp(binary, WBUF_BUF(OF_OBJECT_TO_WBUF(obj)), sizeof(binary))) {
	show_failure(binary, sizeof(binary),
		     WBUF_BUF(OF_OBJECT_TO_WBUF(obj)),
		     WBUF_CURRENT_BYTES(OF_OBJECT_TO_WBUF(obj)));
	of_object_delete(obj);
	return TEST_FAIL;
    }

    of_object_delete(obj);
    return TEST_PASS;
}
Exemple #3
0
static void
port_desc_set_local(of_port_desc_t *of_port_desc)
{
    of_port_desc_port_no_set(of_port_desc, OF_PORT_DEST_LOCAL);
    {
        of_mac_addr_t of_mac_addr;
        /** \todo Get proper MAC address */
        memset(&of_mac_addr, 0, sizeof(of_mac_addr));
        of_port_desc_hw_addr_set(of_port_desc, of_mac_addr);
    }
    of_port_name_t name = "local";
    of_port_desc_name_set(of_port_desc, name);
    of_port_desc_config_set(of_port_desc, 0);
    of_port_desc_state_set(of_port_desc, 0);

    of_port_desc_curr_set(of_port_desc, OF_PORT_FEATURE_FLAG_10GB_FD |
        OF_PORT_FEATURE_FLAG_COPPER_BY_VERSION(of_port_desc->version));
    of_port_desc_advertised_set(of_port_desc, 0);
    of_port_desc_supported_set(of_port_desc, 0);
    of_port_desc_peer_set(of_port_desc, 0);
}
Exemple #4
0
/* Generated from of10/packet_in.data */
static int
test_of10_packet_in(void) {
    uint8_t binary[] = {
        0x01, 0x0a, 0x00, 0x15, 0x12, 0x34, 0x56, 0x78, 
        0xab, 0xcd, 0xef, 0x01, 0x00, 0x09, 0xff, 0xfe, 
        0x01, 0x00, 0x61, 0x62, 0x63, 
    };

    of_object_t *obj;

    obj = of_packet_in_new(OF_VERSION_1_0);
    of_packet_in_buffer_id_set(obj, 2882400001);
    {
        of_octets_t data = { .bytes=3, .data=(uint8_t *)"\x61\x62\x63" };
        of_packet_in_data_set(obj, &data);
    }
    of_packet_in_in_port_set(obj, 65534);
    of_packet_in_reason_set(obj, 1);
    of_packet_in_total_len_set(obj, 9);
    of_packet_in_xid_set(obj, 305419896);

    if (sizeof(binary) != WBUF_CURRENT_BYTES(OF_OBJECT_TO_WBUF(obj))
        || memcmp(binary, WBUF_BUF(OF_OBJECT_TO_WBUF(obj)), sizeof(binary))) {
	show_failure(binary, sizeof(binary),
		     WBUF_BUF(OF_OBJECT_TO_WBUF(obj)),
		     WBUF_CURRENT_BYTES(OF_OBJECT_TO_WBUF(obj)));
	of_object_delete(obj);
	return TEST_FAIL;
    }

    of_object_delete(obj);
    return TEST_PASS;
}

/* Generated from of10/packet_out.data */
static int
test_of10_packet_out(void) {
    uint8_t binary[] = {
        0x01, 0x0d, 0x00, 0x23, 0x12, 0x34, 0x56, 0x78, 
        0xab, 0xcd, 0xef, 0x01, 0xff, 0xfe, 0x00, 0x10, 
        0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 
        0x00, 0x00, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 
        0x61, 0x62, 0x63, 
    };

    of_object_t *obj;

    obj = of_packet_out_new(OF_VERSION_1_0);
    of_packet_out_buffer_id_set(obj, 2882400001);
    of_packet_out_in_port_set(obj, 65534);
    of_packet_out_xid_set(obj, 305419896);
    {
        of_object_t *list = of_list_action_new(OF_VERSION_1_0);
        {
            of_object_t *obj = of_action_output_new(OF_VERSION_1_0);
            of_action_output_max_len_set(obj, 0);
            of_action_output_port_set(obj, 1);
            of_list_append(list, obj);
            of_object_delete(obj);
        }
        {
            of_object_t *obj = of_action_output_new(OF_VERSION_1_0);
            of_action_output_max_len_set(obj, 0);
            of_action_output_port_set(obj, 2);
            of_list_append(list, obj);
            of_object_delete(obj);
        }
        of_packet_out_actions_set(obj, list);
        of_object_delete(list);
    }
    {
        of_octets_t data = { .bytes=3, .data=(uint8_t *)"\x61\x62\x63" };
        of_packet_out_data_set(obj, &data);
    }

    if (sizeof(binary) != WBUF_CURRENT_BYTES(OF_OBJECT_TO_WBUF(obj))
        || memcmp(binary, WBUF_BUF(OF_OBJECT_TO_WBUF(obj)), sizeof(binary))) {
	show_failure(binary, sizeof(binary),
		     WBUF_BUF(OF_OBJECT_TO_WBUF(obj)),
		     WBUF_CURRENT_BYTES(OF_OBJECT_TO_WBUF(obj)));
	of_object_delete(obj);
	return TEST_FAIL;
    }

    of_object_delete(obj);
    return TEST_PASS;
}

/* Generated from of10/port_desc.data */
static int
test_of10_port_desc(void) {
    uint8_t binary[] = {
        0xff, 0xfd, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 
        0x66, 0x6f, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
        0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x00, 
        0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 
        0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 
        
    };

    of_object_t *obj;

    obj = of_port_desc_new(OF_VERSION_1_0);
    of_port_desc_advertised_set(obj, 32);
    of_port_desc_config_set(obj, 16);
    of_port_desc_curr_set(obj, 1);
    {
        of_mac_addr_t hw_addr = { { 1, 2, 3, 4, 5, 6 } };
        of_port_desc_hw_addr_set(obj, hw_addr);
    }
    {
        of_port_name_t name = "foo";
        of_port_desc_name_set(obj, name);
    }
    of_port_desc_peer_set(obj, 2048);
    of_port_desc_port_no_set(obj, 65533);
    of_port_desc_state_set(obj, 512);
    of_port_desc_supported_set(obj, 512);

    if (sizeof(binary) != WBUF_CURRENT_BYTES(OF_OBJECT_TO_WBUF(obj))
        || memcmp(binary, WBUF_BUF(OF_OBJECT_TO_WBUF(obj)), sizeof(binary))) {
	show_failure(binary, sizeof(binary),
		     WBUF_BUF(OF_OBJECT_TO_WBUF(obj)),
		     WBUF_CURRENT_BYTES(OF_OBJECT_TO_WBUF(obj)));
	of_object_delete(obj);
	return TEST_FAIL;
    }

    of_object_delete(obj);
    return TEST_PASS;
}
Exemple #5
0
/* Set the port description in LOCI structure
 * Parameters:
 *    port          (input)   Port number
 *    of_port_desc  (output)  Port description LOCI object
 */
static indigo_error_t ind_ofdpa_port_desc_set(of_port_no_t port, of_port_desc_t *of_port_desc)
{
  OFDPA_ERROR_t ofdpa_rv = OFDPA_E_NONE;
  indigo_error_t err = INDIGO_ERROR_NONE;
  ofdpaMacAddr_t mac;
  of_mac_addr_t of_mac;
  ofdpa_buffdesc nameDesc;
  OFDPA_PORT_STATE_t  state = 0;
  OFDPA_PORT_CONFIG_t config = 0;
  char buff[64];
  uint32_t speed;

  /* Set the port description parameters in LOCI structure */

  /* Port ID */
  of_port_desc_port_no_set(of_port_desc, port);

  /* Port MAC */
  ofdpa_rv = ofdpaPortMacGet(port, &mac);
  if (ofdpa_rv != OFDPA_E_NONE)
  {
    LOG_ERROR("Failed to get Port MAC. (ofdpa_rv = %d)\n", ofdpa_rv);
  }
  memcpy(&of_mac, &mac, sizeof(of_mac));
  of_port_desc_hw_addr_set(of_port_desc, of_mac);

  /* Port Name */
  memset(buff, 0, sizeof(buff));
  nameDesc.pstart = buff;
  nameDesc.size = OFDPA_PORT_NAME_STRING_SIZE;
  ofdpa_rv = ofdpaPortNameGet(port, &nameDesc);
  if (ofdpa_rv != OFDPA_E_NONE)
  {
    LOG_ERROR("Failed to get Port Name. (ofdpa_rv = %d)\n", ofdpa_rv);
  }
  of_port_desc_name_set(of_port_desc, nameDesc.pstart);

  /* Port Config*/
  ofdpa_rv = ofdpaPortConfigGet(port, &config);
  if (ofdpa_rv != OFDPA_E_NONE)
  {
    LOG_ERROR("Failed to get Port Admin State. (ofdpa_rv = %d)\n", ofdpa_rv);
  }
  of_port_desc_config_set(of_port_desc, config);

  /* Port State */
  ofdpa_rv = ofdpaPortStateGet(port, &state);
  if (ofdpa_rv != OFDPA_E_NONE)
  {
    LOG_ERROR("Failed to get Port State. (ofdpa_rv = %d)\n", ofdpa_rv);
  }
  of_port_desc_state_set(of_port_desc, state);


  /* Port Features */
  err = ind_ofdpa_port_features_set(port, of_port_desc);
  if (err != INDIGO_ERROR_NONE)
  {
    LOG_ERROR("Failed to get Port Features. (err = %d)\n", err);
  }

  /* Port Current Speed in kbps */
  ofdpa_rv = ofdpaPortCurrSpeedGet(port, &speed);
  if (ofdpa_rv != OFDPA_E_NONE)
  {
    LOG_ERROR("Failed to get Port Current Speed. (ofdpa_rv = %d)\n", ofdpa_rv);
  }
  of_port_desc_curr_speed_set(of_port_desc, speed);


  /* Port Maximum Speed in kbps */
  speed = 0;
  ofdpa_rv = ofdpaPortMaxSpeedGet(port, &speed);
  if (ofdpa_rv != OFDPA_E_NONE)
  {
    LOG_ERROR("Failed to get Port Max Speed. (ofdpa_rv = %d)\n", ofdpa_rv);
  }
  of_port_desc_max_speed_set(of_port_desc, speed);

  return INDIGO_ERROR_NONE;
}