Skip to content
This repository has been archived by the owner on Sep 14, 2022. It is now read-only.

Crucible1 #169

Draft
wants to merge 5 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion install-trex.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

base_dir="/opt/trex"
tmp_dir="/tmp"
trex_ver="v2.82"
trex_ver="v2.87"
insecure_curl=0
force_install=0

Expand Down
2 changes: 1 addition & 1 deletion launch-trex.sh
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ if [ -d ${trex_dir} -a -d ${tmp_dir} ]; then
else
vlan_opt=""
fi
trex_server_cmd="./t-rex-64 -i -c ${trex_cpus} --checksum-offload --cfg ${yaml_file} --iom 0 -v 4 --prefix trafficgen_trex_ ${vlan_opt}"
trex_server_cmd="./t-rex-64 -i -c ${trex_cpus} --no-ofed-check --checksum-offload --cfg ${yaml_file} --iom 0 -v 4 --prefix trafficgen_trex_ ${vlan_opt}"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So what is the side affect of this? I'm guessing Mellanox can't be used at all on the TRex side?

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, this actually allows us to use Mellanox without TRex complaining.

echo "about to run: ${trex_server_cmd}"
echo "trex yaml:"
echo "-------------------------------------------------------------------"
Expand Down
18 changes: 18 additions & 0 deletions tg_lib.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,24 @@ def ip_to_int (ip):
return ip_int


def int_to_ip (_int):
octet = int(_int / (256**3))
_int = _int - (octet * 256**3)
ip = str(octet)

octet = int(_int / (256**2))
_int = _int - (octet * 256**2)
ip = ip + "." + str(octet)

octet = int(_int / (256**1))
_int = _int - (octet * 256**1)
ip = ip + "." + str(octet)

_int = _int - (octet * 256**1)
ip = ip + "." + str(octet)
return ip


Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You determined that this is backwards compatible, right?

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes

def calculate_latency_pps (dividend, divisor, total_rate, protocols):
return int((float(dividend) / float(divisor) * total_rate / protocols))

Expand Down
17 changes: 2 additions & 15 deletions trex_tg_lib.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,6 @@ def create_icmp_pkt (size, mac_src, mac_dst, ip_src, ip_dst, vlan_id, flow_mods,
pad = max(0, size - len(the_packet)) * 'x'
the_packet = the_packet/pad

#print("create_icmp_pkt: scapy:%s\n" % (the_packet.command()))

if tmp_num_flows and (flow_mods['ip']['src'] or flow_mods['ip']['dst'] or flow_mods['mac']['src'] or flow_mods['mac']['dst']):
vm = vm + [STLVmFixIpv4(offset = "IP")]

Expand Down Expand Up @@ -145,8 +143,6 @@ def create_garp_pkt (mac_src, ip_src, vlan_id, arp_op, flow_mods, num_flows, ena

the_packet = the_packet/ARP(op = arp_op, hwsrc = mac_src, psrc = str(ip_src['start']), hwdst = arp_mac_target, pdst = str(ip_src['start']))

#print("create_garp_pkt: scapy:%s\n" % (the_packet.command()))

if tmp_num_flows and (flow_mods['ip']['src'] or flow_mods['mac']['src']):
if enable_flow_cache:
vm = STLScVmRaw(list_of_commands = vm,
Expand Down Expand Up @@ -197,8 +193,8 @@ def create_generic_pkt (size, mac_src, mac_dst, ip_src, ip_dst, port_src, port_d

tmp_num_flows = num_flows - 1

ip_src = { "start": ip_to_int(ip_src) + flow_offset, "end": ip_to_int(ip_src) + tmp_num_flows + flow_offset }
ip_dst = { "start": ip_to_int(ip_dst) + flow_offset, "end": ip_to_int(ip_dst) + tmp_num_flows + flow_offset }
ip_src = { "start": int_to_ip(ip_to_int(ip_src) + flow_offset), "end": int_to_ip(ip_to_int(ip_src) + tmp_num_flows + flow_offset) }
ip_dst = { "start": int_to_ip(ip_to_int(ip_dst) + flow_offset), "end": int_to_ip(ip_to_int(ip_dst) + tmp_num_flows + flow_offset) }
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As noted above, I believe you found this is backwards compatible.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes


vm = []
if flow_mods['ip']['src'] and tmp_num_flows:
Expand Down Expand Up @@ -267,7 +263,6 @@ def create_generic_pkt (size, mac_src, mac_dst, ip_src, ip_dst, port_src, port_d
pad = max(0, size-len(base)) * 'x'

the_packet = base/pad
#print("create_generic_pkt: scapy:%s\n" % (the_packet.command()))

if tmp_num_flows and (flow_mods['ip']['src'] or flow_mods['ip']['dst'] or flow_mods['mac']['src'] or flow_mods['mac']['dst'] or flow_mods['port']['src'] or flow_mods['port']['dst']):
if packet_protocol == "UDP":
Expand Down Expand Up @@ -296,8 +291,6 @@ def load_user_pkt (the_packet, size, mac_src, mac_dst, ip_src, ip_dst, port_src,
while True:
layer = the_packet.getlayer(layer_counter)
if not layer is None:
#print("Layer %d is '%s'" % (layer_counter, layer.name))
#print(dump_json_readable(layer))

if layer.name == "TCP" or layer.name == "UDP":
packet_protocol = layer.name
Expand All @@ -311,7 +304,6 @@ def load_user_pkt (the_packet, size, mac_src, mac_dst, ip_src, ip_dst, port_src,
layer.src = mac_src
layer.dst = mac_dst

#print(dump_json_readable(layer))
else:
break
layer_counter += 1
Expand Down Expand Up @@ -408,8 +400,6 @@ def load_user_pkt (the_packet, size, mac_src, mac_dst, ip_src, ip_dst, port_src,
pad = max(0, size-len(the_packet)) * 'x'
the_packet = the_packet/pad

#print("load_user_pkt: scapy:%s\n" % (the_packet.command()))

if tmp_num_flows and (flow_mods['ip']['src'] or flow_mods['ip']['dst'] or flow_mods['mac']['src'] or flow_mods['mac']['dst'] or flow_mods['port']['src'] or flow_mods['port']['dst']):
if packet_protocol == "UDP":
vm = vm + [ STLVmFixChecksumHw(l3_offset = "IP", l4_offset = "UDP", l4_type = CTRexVmInsFixHwCs.L4_TYPE_UDP) ]
Expand Down Expand Up @@ -502,7 +492,6 @@ def validate_profile_stream(stream, rate_modifier):
elif (key == 'the_packet') and (fields[0] == 'scapy'):
try:
stream[key] = eval(fields[1])
#print("validate_profile_stream:the_packet: scapy:%s\n" % (stream[key].command()))
except:
raise ValueError("Failed to eval '%s' for '%s'" % (fields[1], key))

Expand Down Expand Up @@ -698,8 +687,6 @@ def sanitize_profiler_value(value):
def trex_profiler_process_sample(sample, stats, prev_sample):
sample = json.loads(sample)
prev_sample = json.loads(prev_sample)
#print(dump_json_readable(sample))
#print(dump_json_readable(prev_sample))

stats[sample['timestamp']]['tsdelta'] = sample['timestamp_delta']

Expand Down