rtnetlink-0.2.0.1: Manipulate network devices, addresses, and routes on Linux

Copyright(c) Formaltech Inc. 2017
LicenseBSD3
Maintainerprotob3n@gmail.com
Stabilityexperimental
PortabilityLinux
Safe HaskellNone
LanguageHaskell2010

System.Linux.RTNetlink.Message

Description

A netlink packet contains a top-level header (struct nlmsghdr from linux/netlink.h), a second-level header that depends on the message type (e.g., struct ifinfomsg from linux/if_link.h), and a possibly nested collection of attributes (see System.Linux.RTNetlink.Packet).

The way to create a netlink packet in RTNetlink is to instantiate either the Message or the Reply class, which entails specifying what the header type should be. You can then instantiate any of the Create, Destroy, Change, or Request classes to indicate which kinds of actions the message can be used to perform.

Synopsis

Documentation

type SequenceNumber = Word32 Source #

Sequence number for an NlMsgHdr.

sequenceNumber :: ByteString -> SequenceNumber Source #

Get the sequence number of a message started by an NLMsgHdr.

data NLMsgErr Source #

The header of an error sent in response to a bad netlink message. The numeric values correspond to negated values from Foreign.C.Error. Try running man 3 errno for more information.

Constructors

NLMsgErr 

Fields

class (Show h, Eq h, Sized h, Serialize h) => Header h where Source #

Class of things that can be used as second-level netlink headers.

Associated Types

type HeaderPart h Source #

Components for a Header, so they can be combined.

Methods

fromHeaderParts :: [HeaderPart h] -> h Source #

How to construct a Header from a list of HeaderParts. An empty list should correspond to emptyHeader.

emptyHeader :: h Source #

Default header for a message, if none is specified.

class Header h => CreateMessageHeader h where Source #

Class of headers that can be used to create things.

Methods

createTypeNumber :: h -> TypeNumber Source #

The top-level type number associated with create messages with this header.

class Header h => DestroyMessageHeader h where Source #

Class of headers that can be used to destroy things.

Methods

destroyTypeNumber :: h -> TypeNumber Source #

The top-level type number associated with destroy messages with this header.

class Header h => ChangeMessageHeader h where Source #

Class of headers that can be used to change things.

Methods

changeTypeNumber :: h -> TypeNumber Source #

The top-level type number associated with change messages with this header.

class Header h => RequestMessageHeader h where Source #

Class of headers that can be used to request things.

Methods

requestTypeNumber :: h -> TypeNumber Source #

The top-level type number associated with request messages with this header.

class Header h => ReplyMessageHeader h where Source #

Class of headers that can be received in reply messages.

Methods

replyTypeNumbers :: h -> [TypeNumber] Source #

The expected top-level type number(s) that mark a packet replies with this header can be parsed from.

class Header (MessageHeader m) => Message m where Source #

Class of things that can be sent as messages.

Minimal complete definition

Nothing

Associated Types

type MessageHeader m Source #

The type of header to attach to the message.

Methods

messageHeaderParts :: m -> [HeaderPart (MessageHeader m)] Source #

Parts to construct a header corresponding to a message. Defaults to [].

messageAttrs :: m -> AttributeList Source #

Construct netlink attributes corresponding to a message. Defaults to [].

Instances
Message Inet6Address Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type MessageHeader Inet6Address :: Type Source #

Message InetAddress Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type MessageHeader InetAddress :: Type Source #

Message LinkMTU Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Associated Types

type MessageHeader LinkMTU :: Type Source #

Message LinkMaster Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Associated Types

type MessageHeader LinkMaster :: Type Source #

Message VlanId Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Associated Types

type MessageHeader VlanId :: Type Source #

Message LinkType Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Associated Types

type MessageHeader LinkType :: Type Source #

Message AnyLink Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Associated Types

type MessageHeader AnyLink :: Type Source #

Message LinkBroadcastEther Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Associated Types

type MessageHeader LinkBroadcastEther :: Type Source #

Message LinkEther Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Associated Types

type MessageHeader LinkEther :: Type Source #

Message LinkName Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Associated Types

type MessageHeader LinkName :: Type Source #

Message LinkIndex Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Associated Types

type MessageHeader LinkIndex :: Type Source #

Message IfInet6Address Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type MessageHeader IfInet6Address :: Type Source #

Message IfInetAddress Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type MessageHeader IfInetAddress :: Type Source #

Message IfLabel Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type MessageHeader IfLabel :: Type Source #

Message IfScope Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type MessageHeader IfScope :: Type Source #

Message IfLifetime Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type MessageHeader IfLifetime :: Type Source #

Message MulticastAutoJoin Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type MessageHeader MulticastAutoJoin :: Type Source #

Message PrefixRoute Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type MessageHeader PrefixRoute :: Type Source #

Message Mip6Homing Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type MessageHeader Mip6Homing :: Type Source #

Message DuplicateAddressDetection Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Message IfPrefix Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type MessageHeader IfPrefix :: Type Source #

Message IfIndex Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type MessageHeader IfIndex :: Type Source #

Message AnyInterface Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type MessageHeader AnyInterface :: Type Source #

(Message m, Message n, MessageHeader m ~ MessageHeader n) => Message (m, n) Source # 
Instance details

Defined in System.Linux.RTNetlink.Message

Associated Types

type MessageHeader (m, n) :: Type Source #

toNLMessage :: Message m => m -> (MessageHeader m -> TypeNumber) -> NLFlags -> SequenceNumber -> NLMessage (MessageHeader m) Source #

Produce an NLMessage suitable for sending over the wire.

class (Message c, CreateMessageHeader (MessageHeader c)) => Create c Source #

Class of Messages representing things that can be created.

Instances
Create LinkType Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Create IfInet6Address Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Create IfInetAddress Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

(Create c, Create d, MessageHeader c ~ MessageHeader d) => Create (c, d) Source # 
Instance details

Defined in System.Linux.RTNetlink.Message

(Create c, MessageHeader c ~ IfInfoMsg) => Create (c, LinkBroadcastEther) Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

(Create c, MessageHeader c ~ IfInfoMsg) => Create (c, LinkEther) Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

(Create c, MessageHeader c ~ IfInfoMsg) => Create (c, LinkName) Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

(Create c, MessageHeader c ~ IfInfoMsg) => Create (c, LinkIndex) Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

(Create c, MessageHeader c ~ IfAddrMsg) => Create (c, IfLabel) Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

(Create c, MessageHeader c ~ IfAddrMsg) => Create (c, IfScope) Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

(Create c, MessageHeader c ~ IfAddrMsg) => Create (c, IfLifetime) Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

(Create c, MessageHeader c ~ IfAddrMsg) => Create (c, PrefixRoute) Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

(Create c, MessageHeader c ~ IfAddrMsg) => Create (c, DuplicateAddressDetection) Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

(Create c, MessageHeader c ~ IfInfoMsg) => Create (LinkBroadcastEther, c) Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

(Create c, MessageHeader c ~ IfInfoMsg) => Create (LinkEther, c) Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

(Create c, MessageHeader c ~ IfInfoMsg) => Create (LinkName, c) Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

(Create c, MessageHeader c ~ IfInfoMsg) => Create (LinkIndex, c) Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

(Create c, MessageHeader c ~ IfAddrMsg) => Create (IfLabel, c) Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

(Create c, MessageHeader c ~ IfAddrMsg) => Create (IfScope, c) Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

(Create c, MessageHeader c ~ IfAddrMsg) => Create (IfLifetime, c) Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

(Create c, MessageHeader c ~ IfAddrMsg) => Create (PrefixRoute, c) Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

(Create c, MessageHeader c ~ IfAddrMsg) => Create (DuplicateAddressDetection, c) Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

createNLMessage :: Create c => c -> SequenceNumber -> NLMessage (MessageHeader c) Source #

Produce an NLMessage suitable for sending over the wire.

class (Message d, DestroyMessageHeader (MessageHeader d)) => Destroy d Source #

Class of Messages representing things that can be destroyed.

Instances
Destroy LinkName Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Destroy LinkIndex Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Destroy IfInet6Address Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Destroy IfInetAddress Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

(Destroy d, Destroy e, MessageHeader d ~ MessageHeader e) => Destroy (d, e) Source # 
Instance details

Defined in System.Linux.RTNetlink.Message

destroyNLMessage :: Destroy d => d -> SequenceNumber -> NLMessage (MessageHeader d) Source #

Produce an NLMessage suitable for sending over the wire.

class (Message id, ChangeMessageHeader (MessageHeader id)) => Change id c where Source #

Class of Messages representing pairs of identifying messages and quality that can be modified.

Minimal complete definition

Nothing

Methods

changeHeaderParts :: id -> c -> [HeaderPart (MessageHeader id)] Source #

Construct a list of HeaderParts from an identifier and a quality. By default, use the identifying message's messageHeaderParts.

changeAttrs :: id -> c -> AttributeList Source #

Construct an AttributeList from an identifier and a quality. By default, use the identifying message's messageAttrs.

Instances
Change LinkName LinkGroup Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Change LinkName LinkMTU Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Change LinkName LinkDebug Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Change LinkName LinkArp Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Change LinkName LinkPromiscuity Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Change LinkName LinkState Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Change LinkName LinkMaster Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Change LinkName LinkBroadcastEther Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Change LinkName LinkEther Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Change LinkIndex LinkGroup Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Change LinkIndex LinkMTU Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Change LinkIndex LinkDebug Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Change LinkIndex LinkArp Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Change LinkIndex LinkPromiscuity Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Change LinkIndex LinkState Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Change LinkIndex LinkMaster Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Change LinkIndex LinkBroadcastEther Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Change LinkIndex LinkEther Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Change LinkIndex LinkName Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

(Change id c, Change id d) => Change id (c, d) Source # 
Instance details

Defined in System.Linux.RTNetlink.Message

Methods

changeHeaderParts :: id -> (c, d) -> [HeaderPart (MessageHeader id)] Source #

changeAttrs :: id -> (c, d) -> AttributeList Source #

(Change id1 c, Change id2 c, MessageHeader id1 ~ MessageHeader id2) => Change (id1, id2) c Source # 
Instance details

Defined in System.Linux.RTNetlink.Message

Methods

changeHeaderParts :: (id1, id2) -> c -> [HeaderPart (MessageHeader (id1, id2))] Source #

changeAttrs :: (id1, id2) -> c -> AttributeList Source #

changeNLMessage :: Change id c => id -> c -> SequenceNumber -> NLMessage (MessageHeader id) Source #

Produce an NLMessage suitable for sending over the wire.

class (Message r, RequestMessageHeader (MessageHeader r)) => Request r where Source #

Class of Messages that can serve as requests.

Methods

requestNLFlags :: r -> ChangeFlags NLFlags Source #

The top-level flags associated with this request.

requestNLMessage :: Request r => r -> SequenceNumber -> NLMessage (MessageHeader r) Source #

Produce an NLMessage suitable for sending over the wire.

dumpOne :: a -> ChangeFlags NLFlags Source #

Top-level flags to indicate that calling dump is expected to yield a single Reply.

dumpMany :: a -> ChangeFlags NLFlags Source #

Top-level flags to indicate that calling dump is expected to yield a multiple Replys.

class ReplyMessageHeader (ReplyHeader r) => Reply r where Source #

Class of things that can be received.

Associated Types

type ReplyHeader r Source #

The type of header associated with this Reply.

Methods

fromNLMessage :: NLMessage (ReplyHeader r) -> Maybe r Source #

Interpret a received NLMessage.

Instances
Reply () Source # 
Instance details

Defined in System.Linux.RTNetlink.Message

Associated Types

type ReplyHeader () :: Type Source #

Reply Errno Source # 
Instance details

Defined in System.Linux.RTNetlink.Message

Associated Types

type ReplyHeader Errno :: Type Source #

Reply Inet6Address Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type ReplyHeader Inet6Address :: Type Source #

Reply InetAddress Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type ReplyHeader InetAddress :: Type Source #

Reply LinkStats Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Associated Types

type ReplyHeader LinkStats :: Type Source #

Reply LinkGroup Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Associated Types

type ReplyHeader LinkGroup :: Type Source #

Reply LinkMTU Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Associated Types

type ReplyHeader LinkMTU :: Type Source #

Reply LinkDebug Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Associated Types

type ReplyHeader LinkDebug :: Type Source #

Reply LinkArp Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Associated Types

type ReplyHeader LinkArp :: Type Source #

Reply LinkPromiscuity Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Associated Types

type ReplyHeader LinkPromiscuity :: Type Source #

Reply LinkState Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Associated Types

type ReplyHeader LinkState :: Type Source #

Reply LinkMaster Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Associated Types

type ReplyHeader LinkMaster :: Type Source #

Reply VlanId Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Associated Types

type ReplyHeader VlanId :: Type Source #

Reply LinkType Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Associated Types

type ReplyHeader LinkType :: Type Source #

Reply LinkBroadcastEther Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Associated Types

type ReplyHeader LinkBroadcastEther :: Type Source #

Reply LinkEther Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Associated Types

type ReplyHeader LinkEther :: Type Source #

Reply LinkName Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Associated Types

type ReplyHeader LinkName :: Type Source #

Reply LinkIndex Source # 
Instance details

Defined in System.Linux.RTNetlink.Link

Associated Types

type ReplyHeader LinkIndex :: Type Source #

Reply IfInet6Address Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type ReplyHeader IfInet6Address :: Type Source #

Reply IfInetAddress Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type ReplyHeader IfInetAddress :: Type Source #

Reply IfLabel Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type ReplyHeader IfLabel :: Type Source #

Reply IfScope Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type ReplyHeader IfScope :: Type Source #

Reply IfLifetime Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type ReplyHeader IfLifetime :: Type Source #

Reply MulticastAutoJoin Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type ReplyHeader MulticastAutoJoin :: Type Source #

Reply PrefixRoute Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type ReplyHeader PrefixRoute :: Type Source #

Reply Permanence Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type ReplyHeader Permanence :: Type Source #

Reply Preference Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type ReplyHeader Preference :: Type Source #

Reply Mip6Homing Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type ReplyHeader Mip6Homing :: Type Source #

Reply DuplicateAddressDetectionFlags Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Reply DuplicateAddressDetection Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Reply Precedence Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type ReplyHeader Precedence :: Type Source #

Reply IfPrefix Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type ReplyHeader IfPrefix :: Type Source #

Reply IfIndex Source # 
Instance details

Defined in System.Linux.RTNetlink.Address

Associated Types

type ReplyHeader IfIndex :: Type Source #

Reply r => Reply (Maybe r) Source # 
Instance details

Defined in System.Linux.RTNetlink.Message

Associated Types

type ReplyHeader (Maybe r) :: Type Source #

(Reply r, Reply s, ReplyHeader r ~ ReplyHeader s) => Reply (Either r s) Source # 
Instance details

Defined in System.Linux.RTNetlink.Message

Associated Types

type ReplyHeader (Either r s) :: Type Source #

(Reply r, Reply s, ReplyHeader r ~ ReplyHeader s) => Reply (r, s) Source # 
Instance details

Defined in System.Linux.RTNetlink.Message

Associated Types

type ReplyHeader (r, s) :: Type Source #

Methods

fromNLMessage :: NLMessage (ReplyHeader (r, s)) -> Maybe (r, s) Source #