From owner-svn-src-user@FreeBSD.ORG Mon Jan 11 22:31:48 2010 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5C0C21065676; Mon, 11 Jan 2010 22:31:48 +0000 (UTC) (envelope-from luigi@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4C5688FC1F; Mon, 11 Jan 2010 22:31:48 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o0BMVmgE095519; Mon, 11 Jan 2010 22:31:48 GMT (envelope-from luigi@svn.freebsd.org) Received: (from luigi@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o0BMVm2o095515; Mon, 11 Jan 2010 22:31:48 GMT (envelope-from luigi@svn.freebsd.org) Message-Id: <201001112231.o0BMVm2o095515@svn.freebsd.org> From: Luigi Rizzo Date: Mon, 11 Jan 2010 22:31:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r202122 - user/luigi/ipfw3-head/sbin/ipfw X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Jan 2010 22:31:48 -0000 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 */