Code Monkey home page Code Monkey logo

crslmnl's Introduction

crslmnl

A Rust wrapper for libmnl.

sample

see examples

requires

  • libmnl - C libmnl library
  • Rust gcc
  • for examples:
    • Rust time
    • Rust mio
    • Rust pnet

links

stackoverflow

thanks to Shepmaster

comparison

original crslmnl remarks
mnl_attr_get_type Attr.atype
mnl_attr_get_len Attr.len
mnl_attr_get_payload_len Attr.payload_len
mnl_attr_get_payload Attr.payload
mnl_attr_get_payload Attr.payload_mut
mnl_attr_ok Attr.ok
mnl_attr_next Attr.next
mnl_attr_type_valid Attr.type_valid
mnl_attr_validate Attr.validate
mnl_attr_validate2 Attr.validate2
mnl_attr_parse Attr.parse
(add) Attr.cl_parse
mnl_attr_parse_nested Attr.parse_nested
(add) Attr.cl_parse_nested
mnl_attr_parse_payload parse_attrs
(add) cl_parse_attrs
mnl_attr_get_u8 Attr.u8
mnl_attr_get_u16 Attr.u16
mnl_attr_get_u32 Attr.u32
mnl_attr_get_u64 Attr.u64
mnl_attr_get_str Attr.str
(add) Attr.string
mnl_attr_put Nlmsg.put_raw
mnl_attr_put_u8 Nlmsg.put_u8_raw
mnl_attr_put_u16 Nlmsg.put_u16_raw
mnl_attr_put_u32 Nlmsg.put_u32_raw
mnl_attr_put_u64 Nlmsg.put_u64_raw
mnl_attr_put_str Nlmsg.put_str_raw
mnl_attr_put_strz Nlmsg.put_strz_raw
mnl_attr_put_check Nlmsg.put
mnl_attr_put_u8_check Nlmsg.put_u8
mnl_attr_put_u16_check Nlmsg.put_u16
mnl_attr_put_u32_check Nlmsg.put_u32
mnl_attr_put_u64_check Nlmsg.put_u64
mnl_attr_put_str_check Nlmsg.put_str
mnl_attr_put_strz_check Nlmsg.put_strz
mnl_attr_nest_start Nlmsg.nest_start_raw
mnl_attr_nest_start_check Nlmsg.nest_start
mnl_attr_nest_end Nlmsg.nest_end
mnl_attr_nest_cancel Nlmsg.nest_cancel
------------------------------------- ----------------------------- -----------------------------
mnl_nlmsg_size Nlmsg::size
mnl_nlmsg_get_payload_len Nlmsg.payload_len
mnl_nlmsg_put_header Nlmsg::new
mnl_nlmsg_put_header Nlmsg.put_header_raw
(add) Nlmsg.put_header_check
mnl_nlmsg_put_extra_header Nlmsg.put_extra_header_raw
(add) Nlmsg.put_sized_header
(add) Nlmsg.put_sized_header_raw
(add) Nlmsg.put_sized_header
mnl_nlmsg_get_paylod Nlmsg.payload
mnl_nlmsg_get_paylod Nlmsg.payload_mut
mnl_nlmsg_get_payload_offset Nlmsg.payload_offset
mnl_nlmsg_get_payload_offset Nlmsg.payload_offset_mut
mnl_nlmsg_ok Nlmsg.ok
mnl_nlmsg_next Nlmsg.next
mnl_nlmsg_get_payload_tail Nlmsg.payload_tail
mnl_nlmsg_get_payload_tail Nlmsg.payload_tail_mut
mnl_nlmsg_seq_ok Nlmsg.seq_ok
mnl_nlmsg_portid_ok Nlmsg.portid_ok
mnl_nlmsg_fprintf Nlmsg.fprintf
mnl_nlmsg_batch_start NlmsgBatch::start
mnl_nlmsg_batch_stop NlmsgBatch.drop
mnl_nlmsg_batch_next NlmsgBatch.next
mnl_nlmsg_batch_reset NlmsgBatch.reset
mnl_nlmsg_batch_size NlmsgBatch.size
mnl_nlmsg_batch_head NlmsgBatch.head
mnl_nlmsg_batch_current NlmsgBatch.current
(add) NlmsgBatch.current_nlmsg
mnl_nlmsg_batch_is_empty NlmsgBatch.is_empty
------------------------------------- ----------------------------- -----------------------------
mnl_cb_run cb_run
mnl_cb_run2 cb_run2
(add) cl_run closure instead of callback
(add) cl_run2 closure instead of callback
------------------------------------- ----------------------------- -----------------------------
mnl_socket_get_fd Socket.as_raw_fd
mnl_socket_get_portid Socket.portid
mnl_socket_open Socket::open
mnl_socket_open2 Socket::open2
mnl_socket_fdopen Socket::fdopen
mnl_socket_bind Socket.bind
mnl_socket_sendto Socket.sendto
(add) Socket.send_nlmsg
(add) Socket.send_batch
mnl_socket_recvfrom Socket.recvfrom
mnl_socket_close Socket.close
mnl_socket_setsockopt Socket.setsockopt
mnl_socket_getsockopt Socket.getsockopt
------------------------------------- ----------------------------- -----------------------------
mnl_attr_for_each Nlmsg.attrs
mnl_attr_for_each_nested Attr.nesteds
------------------------------------- ----------------------------- -----------------------------
(add) NlmsgIterator
(add) Iterator for NlmsgBatch

crslmnl's People

Contributors

chamaken avatar

Stargazers

Astro avatar Eishun Kondoh avatar Dieff avatar  avatar Travis Cross avatar  avatar

Watchers

James Cloos avatar  avatar

crslmnl's Issues

Wrong assignment in Genlmsghdr

First of all: Great library!

I am trying to run the examples/genl/genl-family-get.rs but I am getting an Operation not supported (os error 95) error.

I ran the same program from libmnl examples in C. The libmnl C program works fine. I compared the packages that were sent over the socket using nltrace and found out that crslmnl somehow confuses the order of the bytes in Genlmsghdr:

libmnl's C example sends:

netlink send(3):
Setting msg proto to 16
--------------------------   BEGIN NETLINK MESSAGE ---------------------------
  [NETLINK HEADER] 16 octets
    .nlmsg_len = 36
    .type = 16 <genl/family::nlctrl>
    .flags = 5 <REQUEST,ACK>
    .seq = 1514632813
    .port = 0
  [GENERIC NETLINK HEADER] 4 octets
    .cmd = 3
    .version = 1
    .unused = 0
  [ATTR 02] 10 octets
    77 69 72 65 67 75 61 72 64 00                   wireguard.
  [PADDING] 2 octets
    00 00                                           ..
---------------------------  END NETLINK MESSAGE   ---------------------------

whereas crslmnl sends

--------------------------   BEGIN NETLINK MESSAGE ---------------------------
  [NETLINK HEADER] 16 octets
    .nlmsg_len = 36
    .type = 16 <genl/family::nlctrl>
    .flags = 5 <REQUEST,ACK>
    .seq = 1514632819
    .port = 0
  [GENERIC NETLINK HEADER] 4 octets
    .cmd = 0
    .version = 0
    .unused = 0x103
  [ATTR 02] 10 octets
    77 69 72 65 67 75 61 72 64 00                   wireguard.
  [PADDING] 2 octets
    00 00                                           ..
---------------------------  END NETLINK MESSAGE   ---------------------------

Note the mixup of the bytes in GENERIC NETLINK HEADER.
I tried to figure out if there is a bug in the definition of Genlmsghdr but that looks fine to me.

Do you have an idea what could go wrong here?

EDIT: for debugging purposes I removed the FAMILY_ID attribute, but putting it back again does not change a thing.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.