|
@@ -103,7 +103,7 @@ void run_benchmark(void) {
|
103
|
103
|
puts("* Done *");
|
104
|
104
|
}
|
105
|
105
|
|
106
|
|
-// Unused short options: FQTWYagjkmnqruv0123456789
|
|
106
|
+// Unused short options: FQTWYajkmnqruv0123456789
|
107
|
107
|
static const struct option long_options[] = {
|
108
|
108
|
{ "ident", required_argument, NULL, 'i' },
|
109
|
109
|
{ "daemon", required_argument, NULL, 'd' },
|
|
@@ -120,6 +120,7 @@ static const struct option long_options[] = {
|
120
|
120
|
{ "output", required_argument, NULL, 'O' },
|
121
|
121
|
{ "output-intf", required_argument, NULL, 'o' },
|
122
|
122
|
{ "output-ttl", required_argument, NULL, 't' },
|
|
123
|
+ { "output-tos", required_argument, NULL, 'g' },
|
123
|
124
|
{ "output-filter", no_argument, NULL, 'p' },
|
124
|
125
|
{ "no-output-filter", no_argument, NULL, 'p' },
|
125
|
126
|
{ "output-nit-pass", no_argument, NULL, 'y' },
|
|
@@ -185,6 +186,7 @@ static void show_help(struct ts *ts) {
|
185
|
186
|
printf(" . -O - (write to stdout) (default)\n");
|
186
|
187
|
printf(" -o --output-intf <addr> | Set multicast output interface. Default: %s\n", inet_ntoa(ts->output.intf));
|
187
|
188
|
printf(" -t --output-ttl <ttl> | Set multicast ttl. Default: %d\n", ts->output.ttl);
|
|
189
|
+ printf(" -g --output-tos <tos> | Set TOS value of output packets. Default: none\n");
|
188
|
190
|
printf(" -p --no-output-filter | Disable output filtering. Default: %s\n", ts->pid_filter ? "enabled" : "disabled");
|
189
|
191
|
printf(" -y --output-nit-pass | Pass through NIT.\n");
|
190
|
192
|
printf(" -w --output-eit-pass | Pass through EIT (EPG).\n");
|
|
@@ -264,7 +266,7 @@ static int parse_io_param(struct io *io, char *opt, int open_flags, mode_t open_
|
264
|
266
|
|
265
|
267
|
static void parse_options(struct ts *ts, int argc, char **argv) {
|
266
|
268
|
int j, i, ca_err = 0, server_err = 1, input_addr_err = 0, output_addr_err = 0, output_intf_err = 0, ident_err = 0, port_set = 0;
|
267
|
|
- while ( (j = getopt_long(argc, argv, "i:d:N:Sl:L:I:RzM:O:o:t:pwxyc:C:A:s:U:P:B:eZ:Ef:X:H:G:KJ:D:bhV", long_options, NULL)) != -1 ) {
|
|
269
|
+ while ( (j = getopt_long(argc, argv, "i:d:N:Sl:L:I:RzM:O:o:t:g:pwxyc:C:A:s:U:P:B:eZ:Ef:X:H:G:KJ:D:bhV", long_options, NULL)) != -1 ) {
|
268
|
270
|
char *p = NULL;
|
269
|
271
|
switch (j) {
|
270
|
272
|
case 'i':
|
|
@@ -320,6 +322,9 @@ static void parse_options(struct ts *ts, int argc, char **argv) {
|
320
|
322
|
case 't':
|
321
|
323
|
ts->output.ttl = atoi(optarg);
|
322
|
324
|
break;
|
|
325
|
+ case 'g':
|
|
326
|
+ ts->output.tos = (uint8_t)strtol(optarg, NULL, 0);
|
|
327
|
+ break;
|
323
|
328
|
case 'p':
|
324
|
329
|
ts->pid_filter = 0;
|
325
|
330
|
break;
|
|
@@ -519,6 +524,8 @@ static void parse_options(struct ts *ts, int argc, char **argv) {
|
519
|
524
|
ts_LOGf("Output addr: udp://%s:%u/\n", inet_ntoa(ts->output.addr), ts->output.port);
|
520
|
525
|
ts_LOGf("Output intf: %s\n", inet_ntoa(ts->output.intf));
|
521
|
526
|
ts_LOGf("Output ttl : %d\n", ts->output.ttl);
|
|
527
|
+ if (ts->output.tos > -1)
|
|
528
|
+ ts_LOGf("Output TOS : %u (0x%02x)\n", ts->output.tos, ts->output.tos);
|
522
|
529
|
} else if (ts->output.type == FILE_IO) {
|
523
|
530
|
ts_LOGf("Output file: %s\n", ts->output.fd == 1 ? "STDOUT" : ts->output.fname);
|
524
|
531
|
}
|