summaryrefslogtreecommitdiff
path: root/trafgen_proto.c
diff options
context:
space:
mode:
authorKen Wu <abawwu@gmail.com>2016-12-05 00:39:36 +0800
committerTobias Klauser <tklauser@distanz.ch>2016-12-05 08:43:37 +0100
commitc4e07d5142c8991d532804ff60b5cf16029c0497 (patch)
tree06f5acbe1802fca18153167bb964bf277b012638 /trafgen_proto.c
parent630c65e6794d548f757d904948ef2a6dfd466abe (diff)
trafgen: l3: Support interface without IP address
Move default source address setting to packet_finish so that we do not need to get the device's address if the source address is set in the packet. Without this, trafgen does not work with an interface without address configured. In addition, in the case failing to get the address for an interface, intead of panic, it now prints a warning and uses a value of 0.0.0.0. Signed-off-by: Ken Wu <abawwu@gmail.com> Reviewed-by: Vadim Kochan <vadim4j@gmail.com> Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Diffstat (limited to 'trafgen_proto.c')
-rw-r--r--trafgen_proto.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/trafgen_proto.c b/trafgen_proto.c
index 316fa97..62ac831 100644
--- a/trafgen_proto.c
+++ b/trafgen_proto.c
@@ -364,8 +364,10 @@ static void __proto_field_set_dev_ipv4(struct proto_hdr *hdr, uint32_t fid,
return;
ret = device_address(ctx.dev, AF_INET, &ss);
- if (ret < 0)
- panic("Could not get device IPv4 address\n");
+ if (ret < 0) {
+ fprintf(stderr, "Warning: Could not get device IPv4 address for %s\n", ctx.dev);
+ return;
+ }
ss4 = (struct sockaddr_in *) &ss;
__proto_field_set_bytes(hdr, fid, (uint8_t *)&ss4->sin_addr.s_addr, is_default, false);
@@ -392,8 +394,10 @@ static void __proto_field_set_dev_ipv6(struct proto_hdr *hdr, uint32_t fid,
return;
ret = device_address(ctx.dev, AF_INET6, &ss);
- if (ret < 0)
- panic("Could not get device IPv6 address\n");
+ if (ret < 0) {
+ fprintf(stderr, "Warning: Could not get device IPv6 address for %s\n", ctx.dev);
+ return;
+ }
ss6 = (struct sockaddr_in6 *) &ss;
__proto_field_set_bytes(hdr, fid, (uint8_t *)&ss6->sin6_addr.s6_addr, is_default, false);