# create ports
for port_id in xrange(self.system_info["port_count"]):
- speed = self.system_info['ports'][port_id]['speed']
- driver = self.system_info['ports'][port_id]['driver']
+ speed = self.system_info['ports'][port_id]['speed']
+ driver = self.system_info['ports'][port_id]['driver']
+ macaddr = self.system_info['ports'][port_id]['macaddr']
self.ports[port_id] = Port(port_id,
speed,
driver,
+ macaddr,
self.username,
self.comm_link,
self.session_id)
STATE_PAUSE: "PAUSE"}
- def __init__ (self, port_id, speed, driver, user, comm_link, session_id):
+ def __init__ (self, port_id, speed, driver, macaddr, user, comm_link, session_id):
self.port_id = port_id
self.state = self.STATE_IDLE
self.handler = None
self.user = user
self.driver = driver
self.speed = speed
+ self.macaddr = macaddr
self.streams = {}
self.profile = None
self.session_id = session_id
# generate port info
def get_info (self):
info = {}
- info['speed'] = self.speed
- info['driver'] = self.driver
- info['status'] = self.get_port_state_name()
+ info['speed'] = self.speed
+ info['driver'] = self.driver
+ info['status'] = self.get_port_state_name()
+ info['macaddr'] = self.macaddr
if self.attr.get('promiscuous'):
info['prom'] = "on" if self.attr['promiscuous']['enabled'] else "off"
info = self.get_info()
return {"type": info['driver'],
+ "macaddr": info['macaddr'],
"maximum": "{speed} Gb/s".format(speed=info['speed']),
"status": info['status'],
"promiscuous" : info['prom']
relevant_ports = self.__get_relevant_ports(port_id_list)
return_stats_data = {}
- per_field_status = OrderedDict([("type", []),
+ per_field_status = OrderedDict([("macaddr", []),
+ ("type", []),
("maximum", []),
("status", []),
("promiscuous", []),
#include <stdint.h>
#include <vector>
#include <string>
+#include <string.h>
/**
* Global stats
virtual int del_rx_flow_stat_rule(uint8_t port_id, uint8_t type, uint16_t proto, uint16_t id) const = 0;
virtual void set_promiscuous(uint8_t port_id, bool enabled) const = 0;
virtual bool get_promiscuous(uint8_t port_id) const = 0;
+ virtual void get_macaddr(uint8_t port_id, uint8_t *macaddr) const = 0;
virtual ~TrexPlatformApi() {}
};
int del_rx_flow_stat_rule(uint8_t port_id, uint8_t type, uint16_t proto, uint16_t id) const;
void set_promiscuous(uint8_t port_id, bool enabled) const;
bool get_promiscuous(uint8_t port_id) const;
+ void get_macaddr(uint8_t port_id, uint8_t *macaddr) const;
};
return false;
}
+ void get_macaddr(uint8_t port_id, uint8_t *macaddr) const {
+ memset(macaddr, 0, 6);
+ }
+
private:
int m_dp_core_count;
};
return g_trex.m_ports[port_id].get_promiscuous();
}
+void TrexDpdkPlatformApi::get_macaddr(uint8_t port_id, uint8_t *macaddr) const {
+ struct ether_addr rte_mac_addr;
+
+ g_trex.m_ports[port_id].macaddr_get(&rte_mac_addr);
+
+ assert(ETHER_ADDR_LEN == 6);
+ for (int i = 0; i < 6; i++) {
+ macaddr[i] = rte_mac_addr.addr_bytes[i];
+ }
+
+}
section["ports"][i]["index"] = i;
section["ports"][i]["driver"] = driver;
+ section["ports"][i]["macaddr"] = port->get_macaddr();
section["ports"][i]["rx"]["caps"] = port->get_rx_caps();
section["ports"][i]["rx"]["counters"] = port->get_rx_count_num();
}
+std::string
+TrexStatelessPort::get_macaddr() {
+ uint8_t macaddr[6];
+ std::string output;
+ get_stateless_obj()->get_platform_api()->get_macaddr(m_port_id, macaddr);
+
+ for (int i = 0; i < 6; i++) {
+ char formatted[4];
+
+ if (i == 0) {
+ snprintf(formatted, sizeof(formatted), "%02x", macaddr[i]);
+ } else {
+ snprintf(formatted, sizeof(formatted), ":%02x", macaddr[i]);
+ }
+
+ output += formatted;
+ }
+
+ return output;
+
+}
void
TrexStatelessPort::add_stream(TrexStream *stream) {
*/
void set_promiscuous(bool enabled);
bool get_promiscuous();
+ std::string get_macaddr();
private: