[PATCH 1/2] mausezahn.8: Document -r

14 views
Skip to first unread message

Petr Machata

unread,
Oct 1, 2019, 1:11:10 PM10/1/19
to netsn...@googlegroups.com, Petr Machata
This option is mentioned further in the man page, but is omitted in the
main section. Add it.

Signed-off-by: Petr Machata <pe...@mellanox.com>
---
mausezahn.8 | 3 +++
1 file changed, 3 insertions(+)

diff --git a/mausezahn.8 b/mausezahn.8
index 44a76ab..8379111 100644
--- a/mausezahn.8
+++ b/mausezahn.8
@@ -98,6 +98,9 @@ Apply delay between transmissions. The delay value can be specified in usec
in seconds (e.g. 100s or 100sec). Note: mops also supports nanosecond delay
resolution if you need it (see interactive mode).
.PP
+.SS -r
+Multiply the specified delay with a random value.
+.PP
.SS -p <length>
Pad the raw frame to specified length using zero bytes. Note that for raw
layer 2 frames the specified length defines the whole frame length, while for
--
2.20.1

Petr Machata

unread,
Oct 1, 2019, 1:11:19 PM10/1/19
to netsn...@googlegroups.com, Petr Machata
Add a command line option -R to specify SO_PRIORITY socket option. This
then sets priority of the generated SKBs, which is handy for testing Qdiscs
and other priority-dependent functionality.

Signed-off-by: Petr Machata <pe...@mellanox.com>
---
mausezahn.8 | 6 ++++++
staging/layer3.c | 9 +++++++++
staging/mausezahn.c | 18 +++++++++++++++++-
staging/mz.h | 1 +
4 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/mausezahn.8 b/mausezahn.8
index 8379111..71d3aa0 100644
--- a/mausezahn.8
+++ b/mausezahn.8
@@ -79,6 +79,12 @@ Specify IPv6 mode (IPv4 is the default).
.SS -l <IP>
Specify the IP address mausezahn should bind to when in interactive mode, default: 0.0.0.0.
.PP
+.SS -R <PRIO>
+Set priority of sent packets. This configures SO_PRIORITY at the socket through
+which the packets are sent. Usual priority numbers are 0..15, but the value can
+also be a class ID for purposes of Qdisc classification. In that case, a class
+ID such is 1234:5678 would be specified as 0x12345678.
+.PP
.SS -v
Verbose mode. Capital \-V is even more verbose.
.PP
diff --git a/staging/layer3.c b/staging/layer3.c
index 0b17db1..7dabc26 100644
--- a/staging/layer3.c
+++ b/staging/layer3.c
@@ -133,6 +133,15 @@ libnet_t* get_link_context(void)
fprintf(stderr, "%s", errbuf);
exit(EXIT_FAILURE);
}
+
+ if (tx.prio != 0 &&
+ setsockopt (libnet_getfd (l), SOL_SOCKET, SO_PRIORITY, &tx.prio,
+ sizeof tx.prio) < 0)
+ {
+ perror("setsockopt SO_PRIORITY");
+ exit(EXIT_FAILURE);
+ }
+
return l;
}

diff --git a/staging/mausezahn.c b/staging/mausezahn.c
index de3a2e2..c38ea46 100644
--- a/staging/mausezahn.c
+++ b/staging/mausezahn.c
@@ -34,7 +34,7 @@

int verbose_level = 0;

-static const char *short_options = "46hqvVSxra:A:b:B:c:d:E:f:F:l:p:P:t:T:M:Q:X:";
+static const char *short_options = "46hqvVSxra:A:b:B:c:d:E:f:F:l:p:P:R:t:T:M:Q:X:";

static void signal_handler(int number)
{
@@ -113,6 +113,7 @@ static void help(void)
" -l <ip> Listen address to bind to when in interactive mode, default: 0.0.0.0\n"
" -4 IPv4 mode (default)\n"
" -6 IPv6 mode\n"
+ " -R <PRIO> Set socket priority\n"
" -c <count> Send packet count times, default:1, infinite:0\n"
" -d <delay> Apply delay between transmissions. The delay value can be\n"
" specified in usec (default, no additional unit needed), or in\n"
@@ -224,6 +225,7 @@ int reset(void)
tx.packet_mode = 1; // assume we don't care about L2
tx.count = 1;
tx.delay = DEFAULT_DELAY;
+ tx.prio = 0;
tx.arg_string[0] = '\0';

// Reset Ethernet parameters of TX:
@@ -398,6 +400,7 @@ int getopts (int argc, char *argv[])
char hexpld[MAX_PAYLOAD_SIZE*2];
int hexpld_specified=0;
long delay;
+ long prio;
char unit;

opterr = 1; // let getopt print error message if necessary
@@ -413,6 +416,19 @@ int getopts (int argc, char *argv[])
tx.eth_type = 0x86dd;
ipv6_mode=1;
break;
+ case 'R':
+ errno = 0;
+ prio = strtol(optarg, NULL, 0);
+ if (errno) {
+ perror("Couldn't parse priority");
+ return -1;
+ }
+ if (prio < 0 || prio > 0xffffffff) {
+ perror("Invalid priority value");
+ return -1;
+ }
+ tx.prio = (int)prio;
+ break;
case 'h':
help();
break;
diff --git a/staging/mz.h b/staging/mz.h
index 6d98ad0..5afe57d 100644
--- a/staging/mz.h
+++ b/staging/mz.h
@@ -340,6 +340,7 @@ struct tx_struct
int packet_mode; // 0 means use LIBNET_LINK_ADV, 1 means LIBNET_RAW4
unsigned int count; // 0 means infinite, 1 is default
unsigned int delay; // Delay in microseconds, 0 means no delay (default)
+ unsigned int prio; // Socket priority, 0 is default
char arg_string[MAX_PAYLOAD_SIZE]; // Argument-string when -t is used

// Ethernet and 802.3 parameters
--
2.20.1

Tobias Klauser

unread,
Oct 4, 2019, 4:25:01 AM10/4/19
to netsn...@googlegroups.com, Petr Machata
On 2019-10-01 at 18:40:11 +0200, Petr Machata <pe...@mellanox.com> wrote:
> Add a command line option -R to specify SO_PRIORITY socket option. This
> then sets priority of the generated SKBs, which is handy for testing Qdiscs
> and other priority-dependent functionality.
>
> Signed-off-by: Petr Machata <pe...@mellanox.com>

Both patches applied, thanks Petr!
Reply all
Reply to author
Forward
0 new messages