Another little reorg; we are quite tightly bound to implementation of CStruct
This commit is contained in:
25
README
25
README
@@ -5,6 +5,29 @@ This library provides an API for using a Linux Netlink socket, for doing
|
|||||||
things like manipulating IP interfaces, routes and firewall rules
|
things like manipulating IP interfaces, routes and firewall rules
|
||||||
programmatically.
|
programmatically.
|
||||||
|
|
||||||
|
Code organisation
|
||||||
|
=================
|
||||||
|
|
||||||
|
There are separate classes for each Netlink protocol providing a high-level
|
||||||
|
API. These all in turn use the NLSocket class, which has methods for adding
|
||||||
|
the headers to messages and sending them over a socket. The messages
|
||||||
|
themselves are built using class Message or RtattrMessage, which in turn are
|
||||||
|
subclasses of CStruct, which performs the low-level packing and unpacking of
|
||||||
|
the message bodies.
|
||||||
|
|
||||||
|
Route Firewall ...etc
|
||||||
|
| | |
|
||||||
|
+-------+-------+
|
||||||
|
|
|
||||||
|
v
|
||||||
|
NLSocket
|
||||||
|
|
|
||||||
|
v
|
||||||
|
Message / RtattrMessage
|
||||||
|
|
|
||||||
|
v
|
||||||
|
CStruct
|
||||||
|
|
||||||
Useful reference material
|
Useful reference material
|
||||||
=========================
|
=========================
|
||||||
|
|
||||||
@@ -41,6 +64,8 @@ TODO
|
|||||||
====
|
====
|
||||||
|
|
||||||
* Exception hierarchy
|
* Exception hierarchy
|
||||||
|
* Unit tests
|
||||||
|
* Integration tests
|
||||||
|
|
||||||
Copyright
|
Copyright
|
||||||
=========
|
=========
|
||||||
|
@@ -1,10 +1,12 @@
|
|||||||
|
module Netlink
|
||||||
|
|
||||||
# This class allows defining of C-style structures, and converting
|
# This class allows defining of C-style structures, and converting
|
||||||
# object instances to and from a packed binary representation.
|
# object instances to and from a packed binary representation.
|
||||||
#
|
#
|
||||||
# A new structure is created by subclassing Cstruct, and then using the
|
# A new structure is created by subclassing CStruct, and then using the
|
||||||
# 'field' metaprogramming macro to define each field:
|
# 'field' metaprogramming macro to define each field:
|
||||||
#
|
#
|
||||||
# class Foo < Cstruct
|
# class Foo < CStruct
|
||||||
# field :bar, :char
|
# field :bar, :char
|
||||||
# field :baz, :long
|
# field :baz, :long
|
||||||
#
|
#
|
||||||
@@ -25,7 +27,7 @@
|
|||||||
# str = msg.to_s # convert to binary
|
# str = msg.to_s # convert to binary
|
||||||
# msg2 = Foo.parse(str) # convert from binary
|
# msg2 = Foo.parse(str) # convert from binary
|
||||||
# msg2 = Foo.new(msg) # copy an existing object
|
# msg2 = Foo.new(msg) # copy an existing object
|
||||||
class Cstruct
|
class CStruct
|
||||||
EMPTY_STRING = "".freeze #:nodoc:
|
EMPTY_STRING = "".freeze #:nodoc:
|
||||||
EMPTY_ARRAY = [].freeze #:nodoc:
|
EMPTY_ARRAY = [].freeze #:nodoc:
|
||||||
|
|
||||||
@@ -183,3 +185,4 @@ class Cstruct
|
|||||||
(val + (m-1)) & ~(m-1)
|
(val + (m-1)) & ~(m-1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end # module Netlink
|
@@ -1,4 +1,4 @@
|
|||||||
require 'cstruct'
|
require 'netlink/c_struct'
|
||||||
require 'netlink/constants'
|
require 'netlink/constants'
|
||||||
require 'ipaddr'
|
require 'ipaddr'
|
||||||
|
|
||||||
@@ -6,8 +6,8 @@ module Netlink
|
|||||||
NLMSGHDR_PACK = "LSSLL".freeze # :nodoc:
|
NLMSGHDR_PACK = "LSSLL".freeze # :nodoc:
|
||||||
NLMSGHDR_SIZE = [0,0,0,0,0].pack(NLMSGHDR_PACK).bytesize # :nodoc:
|
NLMSGHDR_SIZE = [0,0,0,0,0].pack(NLMSGHDR_PACK).bytesize # :nodoc:
|
||||||
|
|
||||||
EMPTY_STRING = Cstruct::EMPTY_STRING #:nodoc:
|
EMPTY_STRING = "".freeze #:nodoc:
|
||||||
EMPTY_ARRAY = Cstruct::EMPTY_ARRAY #:nodoc:
|
EMPTY_ARRAY = [].freeze #:nodoc:
|
||||||
|
|
||||||
# This is the base class from which all Netlink messages are derived.
|
# This is the base class from which all Netlink messages are derived.
|
||||||
# To define a new Netlink message, make a subclass and then call the
|
# To define a new Netlink message, make a subclass and then call the
|
||||||
@@ -16,7 +16,7 @@ module Netlink
|
|||||||
# types are to be built using this structure.
|
# types are to be built using this structure.
|
||||||
#
|
#
|
||||||
# Use RtattrMessage instead for messages which are followed by variable rtattrs.
|
# Use RtattrMessage instead for messages which are followed by variable rtattrs.
|
||||||
class Message < Cstruct
|
class Message < CStruct
|
||||||
# Map of numeric message type code => message class
|
# Map of numeric message type code => message class
|
||||||
CODE_TO_MESSAGE = {}
|
CODE_TO_MESSAGE = {}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user