AM_CONDITIONAL([ENABLE_DEVEL], [test "$enable_devel" == "yes"])
regular_CFLAGS="-D_LARGEFILE_SOURCE=1 -D_LARGE_FILES -D_FILE_OFFSET_BITS=64 \
- -D_REENTRANT -Wall -Waggregate-return -Wmissing-declarations \
+ -D_REENTRANT -W -Wall -Waggregate-return -Wmissing-declarations \
-Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes \
-Winline -pipe -DIPTABLES_VERSION=\\\"$PACKAGE_VERSION\\\" \
-DIPT_LIB_DIR=\\\"\${iptdir}\\\" -DIP6T_LIB_DIR=\\\"\${iptdir}\\\"";
# Remove workarounds soon
regular_CFLAGS="$regular_CFLAGS -Wno-aggregate-return \
-Wno-missing-declarations -Wno-missing-prototypes \
- -Wno-redundant-decls -Wno-shadow -Wno-strict-prototypes -Wno-inline"
+ -Wno-unused-parameter \
+ -Wno-shadow -Wno-inline"
AC_SUBST([regular_CFLAGS kinclude_CFLAGS])
AC_SUBST([kbuilddir])
static unsigned int
class_to_dscp(const char *name)
{
- int i;
+ unsigned i;
for (i = 0; i < sizeof(ds_classes) / sizeof(struct ds_class); i++) {
if (!strncasecmp(name, ds_classes[i].name,
{ "hl-set", 1, NULL, '1' },
{ "hl-dec", 1, NULL, '2' },
{ "hl-inc", 1, NULL, '3' },
- { }
+ { .name = NULL }
};
static struct ip6tables_target hl_target6 = {
{ .name = "log-tcp-options", .has_arg = 0, .val = '2' },
{ .name = "log-ip-options", .has_arg = 0, .val = '3' },
{ .name = "log-uid", .has_arg = 0, .val = '4' },
- { }
+ { .name = NULL }
};
/* Initialize the target. */
static const struct option REJECT_opts[] = {
{ "reject-with", 1, NULL, '1' },
- { }
+ { .name = NULL }
};
/* Allocate and initialize the target. */
{ .name = "ahspi", .has_arg = 1, .val = '1' },
{ .name = "ahlen", .has_arg = 1, .val = '2' },
{ .name = "ahres", .has_arg = 0, .val = '3' },
- { }
+ { .name = NULL }
};
static u_int32_t
{ .name = "dst-len", .has_arg = 1, .val = '1' },
{ .name = "dst-opts", .has_arg = 1, .val = '2' },
{ .name = "dst-not-strict", .has_arg = 1, .val = '3' },
- { }
+ { .name = NULL }
};
static u_int32_t
}
static void
-print_options(int optsnr, u_int16_t *optsp)
+print_options(unsigned optsnr, u_int16_t *optsp)
{
unsigned int i;
{ .name = "fragfirst", .has_arg = 0, .val = '4' },
{ .name = "fragmore", .has_arg = 0, .val = '5' },
{ .name = "fraglast", .has_arg = 0, .val = '6' },
- { }
+ { .name = NULL }
};
static u_int32_t
{ "hbh-len", 1, NULL, '1' },
{ "hbh-opts", 1, NULL, '2' },
{ "hbh-not-strict", 1, NULL, '3' },
- { }
+ { .name = NULL }
};
static u_int32_t
}
static void
-print_options(int optsnr, u_int16_t *optsp)
+print_options(unsigned optsnr, u_int16_t *optsp)
{
unsigned int i;
{ .name = "hl-eq", .has_arg = 1, .val = '2' },
{ .name = "hl-lt", .has_arg = 1, .val = '3' },
{ .name = "hl-gt", .has_arg = 1, .val = '4' },
- { }
+ { .name = NULL }
};
static struct ip6tables_match hl_match6 = {
static const struct option icmp6_opts[] = {
{ "icmpv6-type", 1, NULL, '1' },
- { }
+ { .name = NULL }
};
static void
static const struct option ipv6header_opts[] = {
{ "header", 1, NULL, '1' },
{ "soft", 0, NULL, '2' },
- { }
+ { .name = NULL }
};
static void ipv6header_init(struct xt_entry_match *m)
static const struct option mh_opts[] = {
{ "mh-type", 1, NULL, '1' },
- { }
+ { .name = NULL }
};
static struct ip6tables_match mh_match6 = {
.name = "next",
.val = 'a'
},
- { }
+ { .name = NULL }
};
/* FIXME - Duplicated code from ip6tables.c */
{ "rt-0-res", 0, NULL, '4' },
{ "rt-0-addrs", 1, NULL, '5' },
{ "rt-0-not-strict", 0, NULL, '6' },
- { }
+ { .name = NULL }
};
static u_int32_t
}
static void
-print_addresses(int addrnr, struct in6_addr *addrp)
+print_addresses(unsigned addrnr, struct in6_addr *addrp)
{
unsigned int i;
{ "total-nodes", 1, NULL, '4' },
{ "local-node", 1, NULL, '5' },
{ "hash-init", 1, NULL, '6' },
- { }
+ { .name = NULL }
};
static void
static const struct option DNAT_opts[] = {
{ "to-destination", 1, NULL, '1' },
{ "random", 0, NULL, '2' },
- { }
+ { .name = NULL }
};
static struct ipt_natinfo *
{ "ecn-tcp-cwr", 1, NULL, 'G' },
{ "ecn-tcp-ece", 1, NULL, 'H' },
{ "ecn-ip-ect", 1, NULL, '9' },
- { }
+ { .name = NULL }
};
static int ECN_parse(int c, char **argv, int invert, unsigned int *flags,
{ .name = "log-tcp-options", .has_arg = 0, .val = '2' },
{ .name = "log-ip-options", .has_arg = 0, .val = '3' },
{ .name = "log-uid", .has_arg = 0, .val = '4' },
- { }
+ { .name = NULL }
};
/* Initialize the target. */
static const struct option MASQUERADE_opts[] = {
{ "to-ports", 1, NULL, '1' },
{ "random", 0, NULL, '2' },
- { }
+ { .name = NULL }
};
/* Initialize the target. */
static const struct option NETMAP_opts[] = {
{ "to", 1, NULL, '1' },
- { }
+ { .name = NULL }
};
/* Function which prints out usage message. */
static const struct option REDIRECT_opts[] = {
{ "to-ports", 1, NULL, '1' },
{ "random", 0, NULL, '2' },
- { }
+ { .name = NULL }
};
/* Initialize the target. */
static const struct option REJECT_opts[] = {
{ "reject-with", 1, NULL, '1' },
- { }
+ { .name = NULL }
};
/* Allocate and initialize the target. */
{ "to", 1, NULL, '1' },
{ "nodst", 0, NULL, '2'},
{ "random", 0, NULL, '3' },
- { }
+ { .name = NULL }
};
/* Initialize the target. */
{
struct ipt_same_info *mr
= (struct ipt_same_info *)(*target)->data;
- int count;
+ unsigned count;
switch (c) {
case '1':
static void SAME_print(const void *ip, const struct xt_entry_target *target,
int numeric)
{
- int count;
+ unsigned count;
struct ipt_same_info *mr
= (struct ipt_same_info *)target->data;
int random = 0;
/* Saves the union ipt_targinfo in parsable form to stdout. */
static void SAME_save(const void *ip, const struct xt_entry_target *target)
{
- int count;
+ unsigned count;
struct ipt_same_info *mr
= (struct ipt_same_info *)target->data;
int random = 0;
static const struct option SNAT_opts[] = {
{ "to-source", 1, NULL, '1' },
{ "random", 0, NULL, '2' },
- { }
+ { .name = NULL }
};
static struct ipt_natinfo *
{ "ttl-set", 1, NULL, '1' },
{ "ttl-dec", 1, NULL, '2' },
{ "ttl-inc", 1, NULL, '3' },
- { }
+ { .name = NULL }
};
static struct iptables_target ttl_target = {
{"ulog-prefix", 1, NULL, '#'},
{"ulog-cprange", 1, NULL, 'A'},
{"ulog-qthreshold", 1, NULL, 'B'},
- { }
+ { .name = NULL }
};
/* Initialize the target. */
static const struct option addrtype_opts[] = {
{ "src-type", 1, NULL, '1' },
{ "dst-type", 1, NULL, '2' },
- { }
+ { .name = NULL }
};
static struct iptables_match addrtype_match = {
static const struct option ah_opts[] = {
{ "ahspi", 1, NULL, '1' },
- { }
+ { .name = NULL }
};
static u_int32_t
{ .name = "ecn-tcp-cwr", .has_arg = 0, .val = 'F' },
{ .name = "ecn-tcp-ece", .has_arg = 0, .val = 'G' },
{ .name = "ecn-ip-ect", .has_arg = 1, .val = 'H' },
- { }
+ { .name = NULL }
};
static int ecn_parse(int c, char **argv, int invert, unsigned int *flags,
static const struct option icmp_opts[] = {
{ "icmp-type", 1, NULL, '1' },
- { }
+ { .name = NULL }
};
static void
.name = "next",
.val = 'a'
},
- { }
+ { .name = NULL }
};
static int parse_direction(char *s)
static const struct option realm_opts[] = {
{ "realm", 1, NULL, '1' },
- { }
+ { .name = NULL }
};
struct realmname {
{ .name = "name", .has_arg = 1, .val = 208 },
{ .name = "rsource", .has_arg = 0, .val = 209 },
{ .name = "rdest", .has_arg = 0, .val = 210 },
- { }
+ { .name = NULL }
};
/* Function which prints out usage message. */
{ "ttl-eq", 1, NULL, '2'},
{ "ttl-lt", 1, NULL, '3'},
{ "ttl-gt", 1, NULL, '4'},
- { }
+ { .name = NULL }
};
static struct iptables_match ttl_match = {
static const struct option CLASSIFY_opts[] = {
{ "set-class", 1, NULL, '1' },
- { }
+ { .name = NULL }
};
static int CLASSIFY_string_to_priority(const char *s, unsigned int *p)
{ "save-mark", 0, NULL, '2' },
{ "restore-mark", 0, NULL, '3' },
{ "mask", 1, NULL, '4' },
- { }
+ { .name = NULL }
};
static const struct option connmark_tg_opts[] = {
{.name = "ctmask", .has_arg = true, .val = 'c'},
{.name = "nfmask", .has_arg = true, .val = 'n'},
{.name = "mask", .has_arg = true, .val = 'm'},
- {},
+ {.name = NULL},
};
static void connmark_tg_help(void)
static const struct option CONNSECMARK_opts[] = {
{ "save", 0, 0, '1' },
{ "restore", 0, 0, '2' },
- { 0 }
+ { .name = NULL }
};
static int
static const struct option DSCP_opts[] = {
{ "set-dscp", 1, NULL, 'F' },
{ "set-dscp-class", 1, NULL, 'G' },
- { }
+ { .name = NULL }
};
static void
{ "set-mark", 1, NULL, '1' },
{ "and-mark", 1, NULL, '2' },
{ "or-mark", 1, NULL, '3' },
- { }
+ { .name = NULL }
};
static const struct option mark_tg_opts[] = {
{.name = "and-mark", .has_arg = true, .val = '&'},
{.name = "or-mark", .has_arg = true, .val = '|'},
{.name = "xor-mark", .has_arg = true, .val = '^'},
- {},
+ { .name = NULL }
};
static void mark_tg_help(void)
{ "nflog-prefix", 1, NULL, NFLOG_PREFIX },
{ "nflog-range", 1, NULL, NFLOG_RANGE },
{ "nflog-threshold", 1, NULL, NFLOG_THRESHOLD },
- {NULL},
+ { .name = NULL }
};
static void NFLOG_help(void)
static const struct option NFQUEUE_opts[] = {
{ "queue-num", 1, NULL, 'F' },
- { }
+ { .name = NULL }
};
static void
{ "rateest-name", 1, NULL, RATEEST_OPT_NAME },
{ "rateest-interval", 1, NULL, RATEEST_OPT_INTERVAL },
{ "rateest-ewmalog", 1, NULL, RATEEST_OPT_EWMALOG },
- { },
+ { .name = NULL },
};
/* Copied from iproute */
static const struct option SECMARK_opts[] = {
{ "selctx", 1, 0, '1' },
- { 0 }
+ { .name = NULL }
};
/*
static const struct option TCPMSS_opts[] = {
{ "set-mss", 1, NULL, '1' },
{ "clamp-mss-to-pmtu", 0, NULL, '2' },
- { }
+ { .name = NULL }
};
/* Function which parses command options; returns true if it
struct tcp_optionmap {
const char *name, *desc;
- const int option;
+ const unsigned option;
};
static const struct option tcpoptstrip_tg_opts[] = {
{.name = "strip-options", .has_arg = true, .val = 's'},
- {},
+ { .name = NULL }
};
static const struct tcp_optionmap tcp_optionmap[] = {
{"sack", "Selective ACK", TCPOPT_SACK},
{"timestamp", "Timestamp", TCPOPT_TIMESTAMP},
{"md5", "MD5 signature", TCPOPT_MD5SIG},
- {NULL},
+ { .name = NULL }
};
static void tcpoptstrip_tg_help(void)
static const struct option tos_tg_opts_v0[] = {
{.name = "set-tos", .has_arg = true, .val = '='},
- {},
+ { .name = NULL }
};
static const struct option tos_tg_opts[] = {
{.name = "and-tos", .has_arg = true, .val = '&'},
{.name = "or-tos", .has_arg = true, .val = '|'},
{.name = "xor-tos", .has_arg = true, .val = '^'},
- {},
+ { .name = NULL }
};
static void tos_tg_help_v0(void)
static const struct option comment_opts[] = {
{ "comment", 1, NULL, '1' },
- { }
+ { .name = NULL }
};
static void
{ "connbytes", 1, NULL, '1' },
{ "connbytes-dir", 1, NULL, '2' },
{ "connbytes-mode", 1, NULL, '3' },
- { }
+ { .name = NULL }
};
static void
static const struct option connlimit_opts[] = {
{"connlimit-above", 1, NULL, 'A'},
{"connlimit-mask", 1, NULL, 'M'},
- {NULL},
+ { .name = NULL }
};
static void connlimit_init(struct xt_entry_match *match)
static const struct option connmark_mt_opts[] = {
{.name = "mark", .has_arg = true, .val = '1'},
- {},
+ { .name = NULL }
};
static int
{.name = "ctrepldst", .has_arg = true, .val = '6'},
{.name = "ctstatus", .has_arg = true, .val = '7'},
{.name = "ctexpire", .has_arg = true, .val = '8'},
- {},
+ { .name = NULL }
};
static const struct option conntrack_mt_opts[] = {
{.name = "ctreplsrcport", .has_arg = true, .val = 'c'},
{.name = "ctrepldstport", .has_arg = true, .val = 'd'},
{.name = "ctdir", .has_arg = true, .val = 'e'},
- {},
+ {.name = NULL},
};
static int
cp++;
sinfo->expires_min = buffer[0] ? parse_expire(buffer) : 0;
- sinfo->expires_max = cp[0] ? parse_expire(cp) : -1;
+ sinfo->expires_max = cp[0]
+ ? parse_expire(cp)
+ : (unsigned long)-1;
}
free(buffer);
{ .name = "dport", .has_arg = 1, .val = '2' },
{ .name = "dccp-types", .has_arg = 1, .val = '3' },
{ .name = "dccp-option", .has_arg = 1, .val = '4' },
- { }
+ { .name = NULL }
};
static void
static const struct option dscp_opts[] = {
{ "dscp", 1, NULL, 'F' },
{ "dscp-class", 1, NULL, 'G' },
- { }
+ { .name = NULL }
};
static void
static const struct option esp_opts[] = {
{ "espspi", 1, NULL, '1' },
- { }
+ { .name = NULL }
};
static u_int32_t
{ "hashlimit-htable-expire", 1, NULL, ')' },
{ "hashlimit-mode", 1, NULL, '_' },
{ "hashlimit-name", 1, NULL, '"' },
- { }
+ { .name = NULL }
};
static
static const struct option helper_opts[] = {
{ "helper", 1, NULL, '1' },
- { }
+ { .name = NULL }
};
/* Function which parses command options; returns true if it
static const struct option iprange_mt_opts[] = {
{.name = "src-range", .has_arg = true, .val = '1'},
{.name = "dst-range", .has_arg = true, .val = '2'},
- {},
+ { .name = NULL }
};
static void
static const struct option length_opts[] = {
{ "length", 1, NULL, '1' },
- { }
+ { .name = NULL }
};
static u_int16_t
static const struct option limit_opts[] = {
{ "limit", 1, NULL, '%' },
{ "limit-burst", 1, NULL, '$' },
- { }
+ { .name = NULL }
};
static
static const struct option mac_opts[] = {
{ "mac-source", 1, NULL, '1' },
- { }
+ { .name = NULL }
};
static void
static const struct option mark_mt_opts[] = {
{.name = "mark", .has_arg = true, .val = '1'},
- {},
+ { .name = NULL }
};
static int mark_mt_parse(int c, char **argv, int invert, unsigned int *flags,
{ "destination-ports", 1, NULL, '2' },
{ "dports", 1, NULL, '2' }, /* synonym */
{ "ports", 1, NULL, '3' },
- { }
+ { .name = NULL }
};
static char *
#ifdef IPT_OWNER_COMM
{.name = "cmd-owner", .has_arg = true, .val = 'c'},
#endif
- {},
+ { .name = NULL }
};
static const struct option owner_mt6_opts_v0[] = {
{.name = "gid-owner", .has_arg = true, .val = 'g'},
{.name = "pid-owner", .has_arg = true, .val = 'p'},
{.name = "sid-owner", .has_arg = true, .val = 's'},
- {},
+ { .name = NULL }
};
static const struct option owner_mt_opts[] = {
{.name = "uid-owner", .has_arg = true, .val = 'u'},
{.name = "gid-owner", .has_arg = true, .val = 'g'},
{.name = "socket-exists", .has_arg = false, .val = 'k'},
- {},
+ { .name = NULL }
};
static int
{ "physdev-is-in", 0, NULL, '3' },
{ "physdev-is-out", 0, NULL, '4' },
{ "physdev-is-bridged", 0, NULL, '5' },
- { }
+ { .name = NULL }
};
static int
static const struct option pkttype_opts[] = {
{"pkt-type", 1, NULL, '1'},
- { }
+ { .name = NULL }
};
static void parse_pkttype(const char *pkttype, struct xt_pkttype_info *info)
static const struct option quota_opts[] = {
{"quota", 1, NULL, '1'},
- { }
+ { .name = NULL }
};
/* print usage */
printf("Quota: %llu\n", *quota);
#endif
- if (*quota == -1)
+ if (*quota == (u_int64_t)-1)
exit_error(PARAMETER_PROBLEM, "quota invalid: '%s'\n", s);
else
return 1;
{ "rateest-lt", 0, NULL, OPT_RATEEST_LT },
{ "rateest-gt", 0, NULL, OPT_RATEEST_GT },
{ "rateest-eq", 0, NULL, OPT_RATEEST_EQ },
- { },
+ { .name = NULL }
};
/* Copied from iproute. See http://physics.nist.gov/cuu/Units/binary.html */
{ "GBps", 8000000000. },
{ "TiBps", 8.*1024.*1024.*1024.*1024. },
{ "TBps", 8000000000000. },
- { }
+ { .name = NULL }
};
static int
{ .name = "destination-port", .has_arg = 1, .val = '2' },
{ .name = "dport", .has_arg = 1, .val = '2' },
{ .name = "chunk-types", .has_arg = 1, .val = '3' },
- { }
+ { .name = NULL }
};
static void
static const struct option state_opts[] = {
{ "state", 1, NULL, '1' },
- { }
+ { .name = NULL }
};
static int
{ "probability", 1, NULL, '2' },
{ "every", 1, NULL, '3' },
{ "packet", 1, NULL, '4' },
- { }
+ { .name = NULL }
};
static struct xt_statistic_info *info;
exit_error(PARAMETER_PROBLEM,
"--packet can only be used with --every");
/* at this point, info->u.nth.every have been decreased. */
- if (!(info->u.nth.packet >= 0 && info->u.nth.packet <= info->u.nth.every))
+ if (info->u.nth.packet > info->u.nth.every)
exit_error(PARAMETER_PROBLEM,
"the --packet p must be 0 <= p <= n-1");
{ "algo", 1, NULL, '3' },
{ "string", 1, NULL, '4' },
{ "hex-string", 1, NULL, '5' },
- { }
+ { .name = NULL }
};
static void string_init(struct xt_entry_match *m)
{ "syn", 0, NULL, '3' },
{ "tcp-flags", 1, NULL, '4' },
{ "tcp-option", 1, NULL, '5' },
- { }
+ { .name = NULL }
};
static void
static const struct option tcpmss_opts[] = {
{ "mss", 1, NULL, '1' },
- { }
+ { .name = NULL }
};
static u_int16_t
{"monthdays", true, NULL, 'm'},
{"localtz", false, NULL, 'l'},
{"utc", false, NULL, 'u'},
- {NULL},
+ { .name = NULL }
};
static void time_help(void)
static const struct option tos_mt_opts[] = {
{.name = "tos", .has_arg = true, .val = 't'},
- {},
+ { .name = NULL }
};
static void tos_mt_help(void)
static const struct option u32_opts[] = {
{"u32", 1, NULL, 'u'},
- {NULL},
+ { .name = NULL }
};
static void u32_help(void)
{ "sport", 1, NULL, '1' }, /* synonym */
{ "destination-port", 1, NULL, '2' },
{ "dport", 1, NULL, '2' }, /* synonym */
- { }
+ { .name = NULL }
};
static void
{IPTOS_RELIABILITY, "Maximize-Reliability"},
{IPTOS_MINCOST, "Minimize-Cost"},
{IPTOS_NORMALSVC, "Normal-Service"},
- {},
+ { .name = NULL }
};
/*
int ip6tc_commit(ip6tc_handle_t *handle);
/* Get raw socket. */
-int ip6tc_get_raw_socket();
+int ip6tc_get_raw_socket(void);
/* Translates errno numbers into more human-readable form than strerror. */
const char *ip6tc_strerror(int err);
int iptc_commit(iptc_handle_t *handle);
/* Get raw socket. */
-int iptc_get_raw_socket();
+int iptc_get_raw_socket(void);
/* Translates errno numbers into more human-readable form than strerror. */
const char *iptc_strerror(int err);
struct in6_addr *saddrs = NULL, *daddrs = NULL;
int c, verbose = 0;
+ unsigned i;
const char *chain = NULL;
const char *shostnetworkmask = NULL, *dhostnetworkmask = NULL;
const char *policy = NULL, *newname = NULL;
e = NULL;
}
- for (c = 0; c < nsaddrs; c++)
- free(&saddrs[c]);
+ for (i = 0; i < nsaddrs; i++)
+ free(&saddrs[i]);
- for (c = 0; c < ndaddrs; c++)
- free(&daddrs[c]);
+ for (i = 0; i < ndaddrs; i++)
+ free(&daddrs[i]);
free_opts(1);
{"verbose", 0, 0, 'v'},
{"combine", 0, 0, 'c'},
{"help", 0, 0, 'h'},
- {0}
+ { .name = NULL }
};
static void
/* global new argv and argc */
static char *newargv[255];
-static int newargc = 0;
+static unsigned newargc = 0;
static char *oldargv[255];
-static int oldargc = 0;
+static unsigned oldargc = 0;
/* arg meta data, were they quoted, frinstance */
static int newargvattr[255];
static void
free_argv(void)
{
- int i;
+ unsigned i;
for (i = 0; i < newargc; i++) {
free(newargv[i]);
static void
save_argv(void)
{
- int i;
+ unsigned i;
for (i = 0; i < oldargc; i++)
free(oldargv[i]);
}
static void
-closeChain()
+closeChain(void)
{
if (curChain[0] == 0)
return;
}
static void
-finishChains()
+finishChains(void)
{
int c;
}
static void
-closeTable()
+closeTable(void)
{
closeChain();
finishChains();
}
static int
-compareRules()
+compareRules(void)
{
/* compare arguments up to -j or -g for match.
NOTE: We don't want to combine actions if there were no criteria
is the case when processing the ACTUAL output of actual iptables-save
rather than a file merely in a compatable format */
- int old = 0;
- int new = 0;
+ unsigned old = 0;
+ unsigned new = 0;
int compare = 0;
ret = 1;
} else if (curTable[0]) {
- int a;
+ unsigned a;
char *ptr = buffer;
char *pcnt = NULL;
char *bcnt = NULL;
u_int16_t parse_port(const char *port, const char *proto)
{
- unsigned int portnum;
+ unsigned portnum;
if ((string_to_number(port, 0, 65535, &portnum)) != -1 ||
- (portnum = service_to_port(port, proto)) != -1)
+ (portnum = service_to_port(port, proto)) != (unsigned)-1)
return (u_int16_t)portnum;
exit_error(PARAMETER_PROBLEM,