svn commit: r202122 - user/luigi/ipfw3-head/sbin/ipfw
Luigi Rizzo
luigi at FreeBSD.org
Mon Jan 11 22:31:48 UTC 2010
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 */
More information about the svn-src-user
mailing list