Module Name:    src
Committed By:   roy
Date:           Mon Jun  1 16:07:27 UTC 2015

Modified Files:
        src/sys/compat/netbsd32: netbsd32_ioctl.c netbsd32_ioctl.h

Log Message:
Add support for NPF ioctls.


To generate a diff of this commit:
cvs rdiff -u -r1.80 -r1.81 src/sys/compat/netbsd32/netbsd32_ioctl.c
cvs rdiff -u -r1.51 -r1.52 src/sys/compat/netbsd32/netbsd32_ioctl.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/compat/netbsd32/netbsd32_ioctl.c
diff -u src/sys/compat/netbsd32/netbsd32_ioctl.c:1.80 src/sys/compat/netbsd32/netbsd32_ioctl.c:1.81
--- src/sys/compat/netbsd32/netbsd32_ioctl.c:1.80	Mon Jun  1 00:15:08 2015
+++ src/sys/compat/netbsd32/netbsd32_ioctl.c	Mon Jun  1 16:07:27 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_ioctl.c,v 1.80 2015/06/01 00:15:08 roy Exp $	*/
+/*	$NetBSD: netbsd32_ioctl.c,v 1.81 2015/06/01 16:07:27 roy Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001 Matthew R. Green
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_ioctl.c,v 1.80 2015/06/01 00:15:08 roy Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_ioctl.c,v 1.81 2015/06/01 16:07:27 roy Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -68,6 +68,8 @@ __KERNEL_RCSID(0, "$NetBSD: netbsd32_ioc
 #include <net/if_pppoe.h>
 #include <net/if_sppp.h>
 
+#include <net/npf/npf.h>
+
 #include <net/bpf.h>
 #include <netinet/in.h>
 #include <netinet/in_var.h>
@@ -290,6 +292,13 @@ netbsd32_to_u_long(netbsd32_u_long *s32p
 }
 
 static inline void
+netbsd32_to_voidp(netbsd32_voidp *s32p, voidp *p, u_long cmd)
+{
+
+	*p = (void *)NETBSD32PTR64(*s32p);
+}
+
+static inline void
 netbsd32_to_wdog_conf(struct netbsd32_wdog_conf *s32p, struct wdog_conf *p, u_long cmd)
 {
 
@@ -450,6 +459,30 @@ netbsd32_to_ksyms_gvalue(
 	p->kv_name = NETBSD32PTR64(s32p->kv_name);
 }
 
+static inline void
+netbsd32_to_npf_ioctl_table(
+    const struct netbsd32_npf_ioctl_table *s32p,
+    struct npf_ioctl_table *p,
+    u_long cmd)
+{
+
+	p->nct_cmd = s32p->nct_cmd;
+	p->nct_name = NETBSD32PTR64(s32p->nct_name);
+	switch (s32p->nct_cmd) {
+	case NPF_CMD_TABLE_LOOKUP:
+	case NPF_CMD_TABLE_ADD:
+	case NPF_CMD_TABLE_REMOVE:
+		p->nct_data.ent.alen = s32p->nct_data.ent.alen;
+		p->nct_data.ent.addr = s32p->nct_data.ent.addr;
+		p->nct_data.ent.mask = s32p->nct_data.ent.mask;
+		break;
+	case NPF_CMD_TABLE_LIST:
+		p->nct_data.buf.buf = NETBSD32PTR64(s32p->nct_data.buf.buf);
+		p->nct_data.buf.len = s32p->nct_data.buf.len;
+		break;
+	}
+}
+
 /*
  * handle ioctl conversions from 64-bit kernel -> netbsd32
  */
@@ -760,6 +793,14 @@ netbsd32_from_u_long(u_long *p, netbsd32
 }
 
 static inline void
+netbsd32_from_voidp(voidp *p, netbsd32_voidp *s32p, u_long cmd)
+{
+
+	NETBSD32PTR32(*s32p, *p);
+}
+
+
+static inline void
 netbsd32_from_clockctl_settimeofday(
     const struct clockctl_settimeofday *p,
     struct netbsd32_clockctl_settimeofday *s32p,
@@ -825,6 +866,30 @@ netbsd32_from_ksyms_gvalue(
 	s32p->kv_value = p->kv_value;
 }
 
+static inline void
+netbsd32_from_npf_ioctl_table(
+    const struct npf_ioctl_table *p,
+    struct netbsd32_npf_ioctl_table *s32p,
+    u_long cmd)
+{
+
+	s32p->nct_cmd = p->nct_cmd;
+	NETBSD32PTR32(s32p->nct_name, p->nct_name);
+	switch (p->nct_cmd) {
+	case NPF_CMD_TABLE_LOOKUP:
+	case NPF_CMD_TABLE_ADD:
+	case NPF_CMD_TABLE_REMOVE:
+		s32p->nct_data.ent.alen = p->nct_data.ent.alen;
+		s32p->nct_data.ent.addr = p->nct_data.ent.addr;
+		s32p->nct_data.ent.mask = p->nct_data.ent.mask;
+		break;
+	case NPF_CMD_TABLE_LIST:
+		NETBSD32PTR32(s32p->nct_data.buf.buf, p->nct_data.buf.buf);
+		s32p->nct_data.buf.len = p->nct_data.buf.len;
+		break;
+	}
+}
+
 /*
  * main ioctl syscall.
  *
@@ -1205,6 +1270,17 @@ netbsd32_ioctl(struct lwp *l, const stru
 	case KIOCGVALUE32:
 		IOCTL_STRUCT_CONV_TO(KIOCGVALUE, ksyms_gvalue);
 
+	case IOC_NPF_LOAD32:
+		IOCTL_STRUCT_CONV_TO(IOC_NPF_LOAD, plistref);
+	case IOC_NPF_TABLE32:
+		IOCTL_STRUCT_CONV_TO(IOC_NPF_TABLE, npf_ioctl_table);
+	case IOC_NPF_STATS32:
+		IOCTL_CONV_TO(IOC_NPF_STATS, voidp);
+	case IOC_NPF_SAVE32:
+		IOCTL_STRUCT_CONV_TO(IOC_NPF_SAVE, plistref);
+	case IOC_NPF_RULE32:
+		IOCTL_STRUCT_CONV_TO(IOC_NPF_RULE, plistref);
+
 	default:
 #ifdef NETBSD32_MD_IOCTL
 		error = netbsd32_md_ioctl(fp, com, data32, l);

Index: src/sys/compat/netbsd32/netbsd32_ioctl.h
diff -u src/sys/compat/netbsd32/netbsd32_ioctl.h:1.51 src/sys/compat/netbsd32/netbsd32_ioctl.h:1.52
--- src/sys/compat/netbsd32/netbsd32_ioctl.h:1.51	Sun May 31 22:19:41 2015
+++ src/sys/compat/netbsd32/netbsd32_ioctl.h	Mon Jun  1 16:07:27 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_ioctl.h,v 1.51 2015/05/31 22:19:41 roy Exp $	*/
+/*	$NetBSD: netbsd32_ioctl.h,v 1.52 2015/06/01 16:07:27 roy Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001 Matthew R. Green
@@ -581,3 +581,33 @@ struct netbsd32_ksyms_gvalue {
 #define	KIOCGVALUE32	_IOWR('l', 4, struct netbsd32_ksyms_gvalue)
 #define	KIOCGSYMBOL32	_IOWR('l', 5, struct netbsd32_ksyms_gsymbol)
 #endif /* KIOCGSYMBOL */
+
+/* From net/npf/npf.h */
+typedef struct in6_addr		netbsd32_npf_addr_t;
+typedef uint8_t			netbsd32_npf_netmask_t;
+
+typedef struct netbsd32_npf_ioctl_ent {
+	int			alen;
+	netbsd32_npf_addr_t	addr;
+	netbsd32_npf_netmask_t	mask;
+} netbsd32_npf_ioctl_ent_t;
+
+typedef struct netbsd32_npf_ioctl_buf {
+	netbsd32_voidp		buf;
+	netbsd32_size_t		len;
+} netbsd32_npf_ioctl_buf_t;
+
+typedef struct netbsd32_npf_ioctl_table {
+	int			nct_cmd;
+	netbsd32_charp		nct_name;
+	union {
+		netbsd32_npf_ioctl_ent_t ent;
+		netbsd32_npf_ioctl_buf_t buf;
+	} nct_data;
+} netbsd32_npf_ioctl_table_t;
+
+#define IOC_NPF_LOAD32          _IOWR('N', 102, struct netbsd32_plistref)
+#define IOC_NPF_TABLE32         _IOW('N', 103, struct netbsd32_npf_ioctl_table)
+#define IOC_NPF_STATS32         _IOW('N', 104, netbsd32_voidp)
+#define IOC_NPF_SAVE32          _IOR('N', 105, struct netbsd32_plistref)
+#define IOC_NPF_RULE32          _IOWR('N', 107, struct netbsd32_plistref)

Reply via email to