Date: Mon, 11 Jan 2010 22:31:48 +0000 (UTC) From: Luigi Rizzo <luigi@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r202122 - user/luigi/ipfw3-head/sbin/ipfw Message-ID: <201001112231.o0BMVm2o095515@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: luigi Date: Mon Jan 11 22:31:47 2010 New Revision: 202122 URL: http://svn.freebsd.org/changeset/base/202122 Log: start implementing commands with the new IP_DUMMYNET3 sockopt Modified: user/luigi/ipfw3-head/sbin/ipfw/dummynet.c user/luigi/ipfw3-head/sbin/ipfw/ipfw2.c user/luigi/ipfw3-head/sbin/ipfw/ipfw2.h Modified: user/luigi/ipfw3-head/sbin/ipfw/dummynet.c ============================================================================== --- user/luigi/ipfw3-head/sbin/ipfw/dummynet.c Mon Jan 11 22:28:40 2010 (r202121) +++ user/luigi/ipfw3-head/sbin/ipfw/dummynet.c Mon Jan 11 22:31:47 2010 (r202122) @@ -1184,7 +1184,7 @@ end_mask: *p2 = *p; p2->pipe_nr = i; } - i = do_cmd(IP_DUMMYNET_CONFIGURE, base, + i = do_cmd(IP_DUMMYNET3, base, (char *)buf - (char *)base); if (i) @@ -1192,9 +1192,18 @@ end_mask: } void +dummynet_flush(void) +{ + struct dn_id oid; + oid.type = DN_CMD_FLUSH; + oid.len = sizeof(oid); + do_cmd(IP_DUMMYNET3, &oid, sizeof(oid)); +} + +void dummynet_list(int ac, char *av[], int show_counters) { - struct dn_id oid , *x; + struct dn_id oid, *x; int ret, l = sizeof(oid); oid.type = DN_CMD_GET; @@ -1208,7 +1217,7 @@ dummynet_list(int ac, char *av[], int sh oid.subtype = DN_FS; /* list queue */ break; } - ret = do_cmd(IP_DUMMYNET_GET, &oid, (uintptr_t)&l); + ret = do_cmd(-IP_DUMMYNET3, &oid, (uintptr_t)&l); printf("%s returns %d need %d\n", __FUNCTION__, ret, oid.id); if (ret != 0 || oid.id <= sizeof(oid)) return; @@ -1218,7 +1227,7 @@ dummynet_list(int ac, char *av[], int sh err(1, "no memory in %s", __FUNCTION__); } *x = oid; - ret = do_cmd(IP_DUMMYNET_GET, x, (uintptr_t)&l); + ret = do_cmd(-IP_DUMMYNET3, x, (uintptr_t)&l); printf("%s returns %d need %d\n", __FUNCTION__, ret, oid.id); list_pipes(x, O_NEXT(x, l), NULL); free(x); Modified: user/luigi/ipfw3-head/sbin/ipfw/ipfw2.c ============================================================================== --- user/luigi/ipfw3-head/sbin/ipfw/ipfw2.c Mon Jan 11 22:28:40 2010 (r202121) +++ user/luigi/ipfw3-head/sbin/ipfw/ipfw2.c Mon Jan 11 22:31:47 2010 (r202122) @@ -353,6 +353,7 @@ safe_realloc(void *ptr, size_t size) /* * conditionally runs the command. + * Selected options or negative -> getsockopt */ int do_cmd(int optname, void *optval, uintptr_t optlen) @@ -372,11 +373,15 @@ do_cmd(int optname, void *optval, uintpt optname == IP_FW_ADD || optname == IP_FW_TABLE_LIST || optname == IP_FW_TABLE_GETSIZE || optname == IP_FW_NAT_GET_CONFIG || - optname == IP_FW_NAT_GET_LOG) + optname < 0 || + optname == IP_FW_NAT_GET_LOG) { + if (optname < 0) + optname = -optname; i = getsockopt(s, IPPROTO_IP, optname, optval, (socklen_t *)optlen); - else + } else { i = setsockopt(s, IPPROTO_IP, optname, optval, optlen); + } return i; } @@ -3697,6 +3702,10 @@ ipfw_flush(int force) if (c == 'N') /* user said no */ return; } + if (co.do_pipe) { + dummynet_flush(); + return; + } /* `ipfw set N flush` - is the same that `ipfw delete set N` */ if (co.use_set) { uint32_t arg = ((co.use_set - 1) & 0xffff) | (1 << 24); Modified: user/luigi/ipfw3-head/sbin/ipfw/ipfw2.h ============================================================================== --- user/luigi/ipfw3-head/sbin/ipfw/ipfw2.h Mon Jan 11 22:28:40 2010 (r202121) +++ user/luigi/ipfw3-head/sbin/ipfw/ipfw2.h Mon Jan 11 22:31:47 2010 (r202122) @@ -266,6 +266,7 @@ void print_altq_cmd(struct _ipfw_insn_al /* dummynet.c */ void dummynet_list(int ac, char *av[], int show_counters); +void dummynet_flush(void); int ipfw_delete_pipe(int pipe_or_queue, int n); /* ipv6.c */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201001112231.o0BMVm2o095515>