summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--librpc/idl/ioctl.idl45
-rw-r--r--librpc/ndr/ndr_ioctl.c40
-rw-r--r--librpc/wscript_build2
3 files changed, 86 insertions, 1 deletions
diff --git a/librpc/idl/ioctl.idl b/librpc/idl/ioctl.idl
index b4485e0da57..a0a99501c26 100644
--- a/librpc/idl/ioctl.idl
+++ b/librpc/idl/ioctl.idl
@@ -99,3 +99,48 @@ interface compression
uint16 format;
} compression_state;
}
+
+interface netinterface
+{
+ typedef [bitmap32bit] bitmap {
+ FSCTL_NET_IFACE_RSS_CAPABLE = 0x00000001,
+ FSCTL_NET_IFACE_RDMA_CAPABLE = 0x00000002
+ } fsctl_net_iface_capability;
+
+ typedef [enum16bit] enum {
+ FSCTL_NET_IFACE_AF_INET = 0x0002,
+ FSCTL_NET_IFACE_AF_INET6 = 0x0017
+ } fsctl_sockaddr_af;
+
+ typedef [flag(NDR_NOALIGN)] struct {
+ [value(0)] uint16 port;
+ [flag(NDR_BIG_ENDIAN)] ipv4address ipv4;
+ [value(0)] hyper reserved;
+ } fsctl_sockaddr_in;
+
+ typedef [flag(NDR_NOALIGN)] struct {
+ [value(0)] uint16 port;
+ [value(0)] uint32 flowinfo;
+ [flag(NDR_BIG_ENDIAN)] ipv6address ipv6;
+ [value(0)] uint32 scopeid;
+ } fsctl_sockaddr_in6;
+
+ typedef [nodiscriminant,flag(NDR_NOALIGN)] union {
+ [case (FSCTL_NET_IFACE_AF_INET)] fsctl_sockaddr_in saddr_in;
+ [case (FSCTL_NET_IFACE_AF_INET6)] fsctl_sockaddr_in6 saddr_in6;
+ } fsctl_sockaddr_union;
+
+ typedef [flag(NDR_NOALIGN)] struct {
+ fsctl_sockaddr_af family;
+ [subcontext(0),subcontext_size(126),switch_is(family)] fsctl_sockaddr_union saddr;
+ } fsctl_sockaddr_storage;
+
+ typedef [public,relative_base,noprint] struct {
+ [relative] fsctl_net_iface_info *next;
+ uint32 ifindex;
+ fsctl_net_iface_capability capability;
+ [value(0)] uint32 reserved;
+ hyper linkspeed;
+ fsctl_sockaddr_storage sockaddr;
+ } fsctl_net_iface_info;
+}
diff --git a/librpc/ndr/ndr_ioctl.c b/librpc/ndr/ndr_ioctl.c
new file mode 100644
index 00000000000..7e76abc8a6a
--- /dev/null
+++ b/librpc/ndr/ndr_ioctl.c
@@ -0,0 +1,40 @@
+/*
+ Unix SMB/CIFS implementation.
+
+ Manually parsed structures for IOCTL/FSCTL
+
+ Copyright (C) Stefan Metzmacher 2014
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "includes.h"
+#include "librpc/gen_ndr/ndr_ioctl.h"
+
+_PUBLIC_ void ndr_print_fsctl_net_iface_info(struct ndr_print *ndr, const char *name, const struct fsctl_net_iface_info *r)
+{
+ ndr_print_struct(ndr, name, "fsctl_net_iface_info");
+ if (r == NULL) { ndr_print_null(ndr); return; }
+ ndr->depth++;
+ ndr_print_ptr(ndr, "next", r->next);
+ ndr_print_uint32(ndr, "ifindex", r->ifindex);
+ ndr_print_fsctl_net_iface_capability(ndr, "capability", r->capability);
+ ndr_print_uint32(ndr, "reserved", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?0:r->reserved);
+ ndr_print_hyper(ndr, "linkspeed", r->linkspeed);
+ ndr_print_fsctl_sockaddr_storage(ndr, "sockaddr", &r->sockaddr);
+ ndr->depth--;
+ if (r->next) {
+ ndr_print_fsctl_net_iface_info(ndr, "next", r->next);
+ }
+}
diff --git a/librpc/wscript_build b/librpc/wscript_build
index b21619e244c..0a60b623202 100644
--- a/librpc/wscript_build
+++ b/librpc/wscript_build
@@ -616,7 +616,7 @@ bld.SAMBA_SUBSYSTEM('RPC_NDR_DNSSERVER',
)
bld.SAMBA_SUBSYSTEM('NDR_IOCTL',
- source='gen_ndr/ndr_ioctl.c',
+ source='gen_ndr/ndr_ioctl.c ndr/ndr_ioctl.c',
public_deps='ndr'
)