コード例 #1
0
        public unsafe static FileDescriptor OpenNetMap(string interfaceName, int ringId, NetMapRequestFlags flags, out NetMapRequest returnedRequest)
        {
            var fd = Open("/dev/netmap", OpenFlags.O_RDWR);

            if (!fd.IsValid)
            {
                ExceptionHelper.ThrowInvalidOperation($"Unable to open the /dev/netmap device {fd}");
            }
            var request = new NetMapRequest
            {
                nr_cmd     = 0,
                nr_ringid  = (ushort)ringId,
                nr_version = NETMAP_API,
                nr_flags   = flags,
            };
            var textbytes = Encoding.ASCII.GetBytes(interfaceName + "\0");

            fixed(void *txtPtr = textbytes)
            {
                Buffer.MemoryCopy(txtPtr, request.nr_name, textbytes.Length, textbytes.Length);
            }

            if (IOCtl(fd, IOControlCommand.NIOCREGIF, ref request) != 0)
            {
                ExceptionHelper.ThrowInvalidOperation("Failed to open an FD for a single ring");
            }
            returnedRequest = request;
            return(fd);
        }
コード例 #2
0
 internal static extern int IOCtl(FileDescriptor descriptor, IOControlCommand request, ref NetMapRequest data);