Skip to content

Commit

Permalink
Add IPv6 support
Browse files Browse the repository at this point in the history
Add ability to assign IPv6 to Ixia ports.
Add ability to create IPv6 traffic.
Add SendNs function.
Update set_traffic function:
- instead of using 2 functions with duplicate code to create
  traffic there is only 1 now.
- the user can specify `type: ipv6` to create IPv6 traffic.
- the user can also specify `type: ethernet | raw` and
  `protocol: ipv6` to create ethernet/raw traffic with
  IPv6 header.
- old behavior is preserved.

Signed-off-by: Serhiy Boiko <serhiy.boiko@plvision.eu>
  • Loading branch information
SerhiyBoikoPLV authored and yuriilisovskyi committed Mar 28, 2023
1 parent 7fed0a0 commit e6c4571
Show file tree
Hide file tree
Showing 6 changed files with 226 additions and 190 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ def tgen_utils_dev_groups_from_config(config):
"gw": peer ip,
"plen": prefix length,
"vlan": vlan id to be configured (optional),
"version": [ ipv4 | ipv6 ] (default is ipv4)
},
...
]
Expand All @@ -117,6 +118,7 @@ def tgen_utils_dev_groups_from_config(config):
"gw": el["gw"],
"plen": el["plen"],
"vlan": el.get("vlan", None),
"version": el.get("version", "ipv4"),
})
return dev_groups

Expand Down Expand Up @@ -743,3 +745,33 @@ async def tgen_utils_send_arp(device, config):
if out[0][device.host_name]["rc"] != 0:
device.applog.warning(f"Some arps did not reach their destination\n{out}")
return out[0][device.host_name]["result"]


async def tgen_utils_send_ns(device, config):
"""
- Sends NS packets from TG ports to DUT
- Expects config to be a list of dicts:
[
{
"ixp": tgen port,
"src_ip": tgen port ip (optional),
},
...
]
- returns a list of dicts for each NS sent
[
{
"success": True or False,
"port": tg_port,
"src_ip": tg_port ip,
},
...
]
"""
out = await TrafficGen.send_ns(input_data=[{device.host_name: [
{"port": ns["ixp"], "src_ip": ns["src_ip"] if "src_ip" in ns else None}
for ns in config
]}])
if out[0][device.host_name]["rc"] != 0:
device.applog.warning(f"Some NSs did not reach their destination\n{out}")
return out[0][device.host_name]["result"]
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@
'load_config', 'save_config',
'set_traffic', 'start_traffic', 'stop_traffic', 'get_stats', 'clear_stats',
'start_protocols', 'stop_protocols', 'set_protocol', 'get_protocol_stats',
'clear_protocol_stats', 'send_arp', 'send_ping', 'clear_traffic', 'get_drilldown_stats']
'clear_protocol_stats', 'send_arp', 'send_ns', 'send_ping', 'clear_traffic',
'get_drilldown_stats']
members:
- name: client_addr
type: ip_addr_t
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
clear_protocol_stats - [protocols]
send_ping - [port, dst_ip, src_ip]
send_arp - [port, src_ip]
send_ns - [port, src_ip]
clear_traffic - [traffic_names]
implements: "dent:traffic:traffic_gen"
platforms: ['ixnetwork']
Expand Down Expand Up @@ -69,9 +70,10 @@
desc: |
- IxiaClient
send_ping - [port, dst_ip, src_ip]
- name: send_arp
apis: ['send_arp']
- name: resolve_neighbor
apis: ['send_arp', 'send_ns']
params: ['ports', 'src_ip']
desc: |
- IxiaClient
send_arp - [port, src_ip]
send_ns - [port, src_ip]
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class IxnetworkIxiaClient(TestLibObject):
clear_protocol_stats - [protocols]
send_ping - [port, dst_ip, src_ip]
send_arp - [port, src_ip]
send_ns - [port, src_ip]
clear_traffic - [traffic_names]
"""
Expand Down Expand Up @@ -72,13 +73,13 @@ def run_send_ping(self, device, command, *argv, **kwarg):
def parse_send_ping(self, command, output, *argv, **kwarg):
raise NotImplementedError

def format_send_arp(self, command, *argv, **kwarg):
def format_resolve_neighbor(self, command, *argv, **kwarg):
raise NotImplementedError

def run_send_arp(self, device, command, *argv, **kwarg):
def run_resolve_neighbor(self, device, command, *argv, **kwarg):
raise NotImplementedError

def parse_send_arp(self, command, output, *argv, **kwarg):
def parse_resolve_neighbor(self, command, output, *argv, **kwarg):
raise NotImplementedError

def format_command(self, command, *argv, **kwarg):
Expand All @@ -97,8 +98,8 @@ def format_command(self, command, *argv, **kwarg):
if command in ['send_ping']:
return self.format_send_ping(command, *argv, **kwarg)

if command in ['send_arp']:
return self.format_send_arp(command, *argv, **kwarg)
if command in ['send_arp', 'send_ns']:
return self.format_resolve_neighbor(command, *argv, **kwarg)


raise NameError("Cannot find command "+command)
Expand All @@ -119,8 +120,8 @@ def run_command(self, device_obj, command, *argv, **kwarg):
if command in ['send_ping']:
return self.run_send_ping(device_obj, command, *argv, **kwarg)

if command in ['send_arp']:
return self.run_send_arp(device_obj, command, *argv, **kwarg)
if command in ['send_arp', 'send_ns']:
return self.run_resolve_neighbor(device_obj, command, *argv, **kwarg)


print (len(command))
Expand All @@ -142,8 +143,8 @@ def parse_output(self, command, output, *argv, **kwarg):
if command in ['send_ping']:
return self.parse_send_ping(command, output, *argv, **kwarg)

if command in ['send_arp']:
return self.parse_send_arp(command, output, *argv, **kwarg)
if command in ['send_arp', 'send_ns']:
return self.parse_resolve_neighbor(command, output, *argv, **kwarg)


raise NameError("Cannot find command "+command)
Expand Down
Loading

0 comments on commit e6c4571

Please sign in to comment.