Routing Netlink

The rtnl module provides functions for interacting with the routing netlink interface.

Functions can be individually imported and directly accessed using the named import syntax:

import { error, request, listener, RTM_GETROUTE, RTM_NEWROUTE, RTM_DELROUTE, AF_INET } from 'rtnl';

// Send a netlink request
let response = request(RTM_GETROUTE, 0, { family: AF_INET });

// Create a listener for route changes
let routeListener = listener((msg) => {
    print('Received route message:', msg, '\n');
}, [RTM_NEWROUTE, RTM_DELROUTE]);

Alternatively, the module namespace can be imported using a wildcard import statement:

import * as rtnl from 'rtnl';

// Send a netlink request
let response = rtnl.request(rtnl.RTM_GETROUTE, 0, { family: rtnl.AF_INET });

// Create a listener for route changes
let listener = rtnl.listener((msg) => {
    print('Received route message:', msg, '\n');
}, [rtnl.RTM_NEWROUTE, rtnl.RTM_DELROUTE]);

Additionally, the rtnl module namespace may also be imported by invoking the ucode interpreter with the -lrtnl switch.

Classes

rtnl.listener

Represents a netlink listener resource.

Methods

error() → {string}nullable

Query error information.

Returns a string containing a description of the last occurred error or null if there is no error information.

Returns: string
Example
// Trigger rtnl error
request('invalid_command', {}, {});

// Print error (should yield error description)
print(error(), "\n");

listener(callback, commandsopt, groupsopt) → {listener}

Create a netlink listener.

Creates a new netlink listener that will receive messages matching the specified commands and multicast groups.

Parameters:
NameTypeDescription
callbackfunction

The callback function to invoke when a message is received

commandsstring[](optional)

Array of netlink commands to listen for (optional)

groupsnumber[](optional)

Array of multicast groups to join (optional)

Returns: listener
  • A listener object with methods to control the listener
Example
// Create a listener for route changes
let routeListener = listener((msg) => {
    print('Received route message:', msg, '\n');
}, [RTM_NEWROUTE, RTM_DELROUTE]);

request(cmd, flags, payload) → {*}nullable

Send a netlink request.

Sends a netlink request with the specified command, flags, and payload.

Parameters:
NameTypeDescription
cmdstring

The netlink command to send

flagsnumber

The netlink flags for the request

payload*

The payload data for the request

Returns: *
  • The response data or null on error
Example
// Send a route request
let response = request('RTM_GETROUTE', 0, { family: AF_INET });

Type Definitions

Address families

Properties
NameTypeDescription
AF_UNSPECnumber

Unspecified address family

AF_INETnumber

IPv4 address family

AF_INET6number

IPv6 address family

AF_MPLSnumber

MPLS address family

AF_BRIDGEnumber

Bridge address family

Address flags

Properties
NameTypeDescription
IFA_F_DADFAILEDnumber

DAD failed

IFA_F_DEPRECATEDnumber

Deprecated

IFA_F_HOMEADDRESSnumber

Home address

IFA_F_MANAGETEMPADDRnumber

Manage temporary address

IFA_F_MCAUTOJOINnumber

Multicast auto join

IFA_F_NODADnumber

No DAD

IFA_F_NOPREFIXROUTEnumber

No prefix route

IFA_F_OPTIMISTICnumber

Optimistic

IFA_F_PERMANENTnumber

Permanent

IFA_F_SECONDARYnumber

Secondary

IFA_F_STABLE_PRIVACYnumber

Stable privacy

IFA_F_TEMPORARYnumber

Temporary

IFA_F_TENTATIVEnumber

Tentative

Bridge VLAN information flags

Properties
NameTypeDescription
BRIDGE_VLAN_INFO_MASTERnumber

Master VLAN info

BRIDGE_VLAN_INFO_PVIDnumber

Primary VLAN ID

BRIDGE_VLAN_INFO_UNTAGGEDnumber

Untagged VLAN

BRIDGE_VLAN_INFO_RANGE_BEGINnumber

Range begin

BRIDGE_VLAN_INFO_RANGE_ENDnumber

Range end

BRIDGE_VLAN_INFO_BRENTRYnumber

Bridge entry

Bridge flags

Properties
NameTypeDescription
BRIDGE_FLAGS_MASTERnumber

Master flag

BRIDGE_FLAGS_SELFnumber

Self flag

Bridge modes

Properties
NameTypeDescription
BRIDGE_MODE_VEBnumber

Virtual Ethernet Bridge mode

BRIDGE_MODE_VEPAnumber

Virtual Ethernet Port Aggregator mode

BRIDGE_MODE_UNDEFnumber

Undefined mode

BRIDGE_MODE_UNSPECnumber

Unspecified mode

BRIDGE_MODE_HAIRPINnumber

Hairpin mode

FDB notification bits

Properties
NameTypeDescription
FDB_NOTIFY_BITnumber

Notify bit

FDB_NOTIFY_INACTIVE_BITnumber

Inactive notify bit

FIB rule actions

Properties
NameTypeDescription
FR_ACT_TO_TBLnumber

To table action

FR_ACT_GOTOnumber

Goto action

FR_ACT_NOPnumber

No operation action

FR_ACT_BLACKHOLEnumber

Blackhole action

FR_ACT_UNREACHABLEnumber

Unreachable action

FR_ACT_PROHIBITnumber

Prohibit action

FIB rule flags

Properties
NameTypeDescription
FIB_RULE_PERMANENTnumber

Permanent rule

FIB_RULE_INVERTnumber

Invert rule

FIB_RULE_UNRESOLVEDnumber

Unresolved rule

FIB_RULE_IIF_DETACHEDnumber

Interface detached

FIB_RULE_DEV_DETACHEDnumber

Device detached

FIB_RULE_OIF_DETACHEDnumber

Output interface detached

GTP roles

Properties
NameTypeDescription
GTP_ROLE_GGSNnumber

GGSN role

GTP_ROLE_SGSNnumber

SGSN role

Generic Routing Encapsulation flags

Properties
NameTypeDescription
GRE_CSUMnumber

Checksum flag

GRE_ROUTINGnumber

Routing flag

GRE_KEYnumber

Key flag

GRE_SEQnumber

Sequence flag

GRE_STRICTnumber

Strict flag

GRE_RECnumber

Record flag

GRE_ACKnumber

Acknowledgment flag

Geneve data frame flags

Properties
NameTypeDescription
GENEVE_DF_UNSETnumber

Data frame unset

GENEVE_DF_SETnumber

Data frame set

GENEVE_DF_INHERITnumber

Data frame inherit

GENEVE_DF_MAXnumber

Maximum data frame

HSR protocols

Properties
NameTypeDescription
HSR_PROTOCOL_HSRnumber

HSR protocol

HSR_PROTOCOL_PRPnumber

PRP protocol

IPVLAN modes

Properties
NameTypeDescription
IPVLAN_MODE_L2number

Layer 2 mode

IPVLAN_MODE_L3number

Layer 3 mode

IPVLAN_MODE_L3Snumber

Layer 3 symmetric mode

IPoIB modes

Properties
NameTypeDescription
IPOIB_MODE_DATAGRAMnumber

Datagram mode

IPOIB_MODE_CONNECTEDnumber

Connected mode

IPv6 address generation modes

Properties
NameTypeDescription
IN6_ADDR_GEN_MODE_EUI64number

EUI-64 mode

IN6_ADDR_GEN_MODE_NONEnumber

No mode

IN6_ADDR_GEN_MODE_STABLE_PRIVACYnumber

Stable privacy mode

IN6_ADDR_GEN_MODE_RANDOMnumber

Random mode

IPv6 tunnel flags

Properties
NameTypeDescription
IP6_TNL_F_ALLOW_LOCAL_REMOTEnumber

Allow local remote

IP6_TNL_F_IGN_ENCAP_LIMITnumber

Ignore encapsulation limit

IP6_TNL_F_MIP6_DEVnumber

Mobile IPv6 device

IP6_TNL_F_RCV_DSCP_COPYnumber

Receive DSCP copy

IP6_TNL_F_USE_ORIG_FLOWLABELnumber

Use original flow label

IP6_TNL_F_USE_ORIG_FWMARKnumber

Use original firewall mark

IP6_TNL_F_USE_ORIG_TCLASSnumber

Use original traffic class

Interface flags

Properties
NameTypeDescription
NTF_EXT_LEARNEDnumber

Externally learned

NTF_MASTERnumber

Master interface

NTF_OFFLOADEDnumber

Offloaded

NTF_PROXYnumber

Proxy

NTF_ROUTERnumber

Router

NTF_SELFnumber

Self

NTF_STICKYnumber

Sticky

NTF_USEnumber

Use

Link extended statistics types

Properties
NameTypeDescription
LINK_XSTATS_TYPE_UNSPECnumber

Unspecified type

LINK_XSTATS_TYPE_BRIDGEnumber

Bridge type

LINK_XSTATS_TYPE_BONDnumber

Bond type

MACVLAN MAC address commands

Properties
NameTypeDescription
MACVLAN_MACADDR_ADDnumber

Add MAC address

MACVLAN_MACADDR_DELnumber

Delete MAC address

MACVLAN_MACADDR_FLUSHnumber

Flush MAC addresses

MACVLAN_MACADDR_SETnumber

Set MAC address

MACVLAN modes

Properties
NameTypeDescription
MACVLAN_MODE_PRIVATEnumber

Private mode

MACVLAN_MODE_VEPAnumber

VEPA mode

MACVLAN_MODE_BRIDGEnumber

Bridge mode

MACVLAN_MODE_PASSTHRUnumber

Pass-through mode

MACVLAN_MODE_SOURCEnumber

Source mode

MACsec offload modes

Properties
NameTypeDescription
MACSEC_OFFLOAD_OFFnumber

Offload off

MACSEC_OFFLOAD_PHYnumber

Physical offload

MACSEC_OFFLOAD_MACnumber

MAC offload

MACSEC_OFFLOAD_MAXnumber

Maximum offload

MACsec validation levels

Properties
NameTypeDescription
MACSEC_VALIDATE_DISABLEDnumber

Disabled validation

MACSEC_VALIDATE_CHECKnumber

Check validation

MACSEC_VALIDATE_STRICTnumber

Strict validation

MACSEC_VALIDATE_MAXnumber

Maximum validation

Multicast groups

Properties
NameTypeDescription
RTNLGRP_NONEnumber

No group

RTNLGRP_LINKnumber

Link group

RTNLGRP_NOTIFYnumber

Notify group

RTNLGRP_NEIGHnumber

Neighbor group

RTNLGRP_TCnumber

Traffic control group

RTNLGRP_IPV4_IFADDRnumber

IPv4 interface address group

RTNLGRP_IPV4_MROUTEnumber

IPv4 multicast route group

RTNLGRP_IPV4_ROUTEnumber

IPv4 route group

RTNLGRP_IPV4_RULEnumber

IPv4 rule group

RTNLGRP_IPV6_IFADDRnumber

IPv6 interface address group

RTNLGRP_IPV6_MROUTEnumber

IPv6 multicast route group

RTNLGRP_IPV6_ROUTEnumber

IPv6 route group

RTNLGRP_IPV6_IFINFOnumber

IPv6 interface info group

RTNLGRP_DECnet_IFADDRnumber

DECnet interface address group

RTNLGRP_NOP2number

No operation 2

RTNLGRP_DECnet_ROUTEnumber

DECnet route group

RTNLGRP_DECnet_RULEnumber

DECnet rule group

RTNLGRP_NOP4number

No operation 4

RTNLGRP_IPV6_PREFIXnumber

IPv6 prefix group

RTNLGRP_IPV6_RULEnumber

IPv6 rule group

RTNLGRP_ND_USEROPTnumber

Neighbor discovery user option group

RTNLGRP_PHONET_IFADDRnumber

Phonet interface address group

RTNLGRP_PHONET_ROUTEnumber

Phonet route group

RTNLGRP_DCBnumber

Data Center Bridging group

RTNLGRP_IPV4_NETCONFnumber

IPv4 network configuration group

RTNLGRP_IPV6_NETCONFnumber

IPv6 network configuration group

RTNLGRP_MDBnumber

Multicast database group

RTNLGRP_MPLS_ROUTEnumber

MPLS route group

RTNLGRP_NSIDnumber

Network namespace ID group

RTNLGRP_MPLS_NETCONFnumber

MPLS network configuration group

RTNLGRP_IPV4_MROUTE_Rnumber

IPv4 multicast route reverse group

RTNLGRP_IPV6_MROUTE_Rnumber

IPv6 multicast route reverse group

RTNLGRP_NEXTHOPnumber

Next hop group

RTNLGRP_BRVLANnumber

Bridge VLAN group

Neighbor discovery user option types

Properties
NameTypeDescription
NDUSEROPT_UNSPECnumber

Unspecified option

NDUSEROPT_SRCADDRnumber

Source address option

Neighbor states

Properties
NameTypeDescription
NUD_DELAYnumber

Delay state

NUD_FAILEDnumber

Failed state

NUD_INCOMPLETEnumber

Incomplete state

NUD_NOARPnumber

No ARP

NUD_NONEnumber

No state

NUD_PERMANENTnumber

Permanent state

NUD_PROBEnumber

Probe state

NUD_REACHABLEnumber

Reachable state

NUD_STALEnumber

Stale state

Netlink message flags

Properties
NameTypeDescription
NLM_F_ACKnumber

Request for acknowledgment

NLM_F_ACK_TLVSnumber

Request for acknowledgment with TLVs

NLM_F_APPENDnumber

Append to existing list

NLM_F_ATOMICnumber

Atomic operation

NLM_F_CAPPEDnumber

Request capped

NLM_F_CREATEnumber

Create if not exists

NLM_F_DUMPnumber

Dump request

NLM_F_DUMP_FILTEREDnumber

Dump filtered request

NLM_F_DUMP_INTRnumber

Dump interrupted

NLM_F_ECHOnumber

Echo request

NLM_F_EXCLnumber

Exclusive creation

NLM_F_MATCHnumber

Match request

NLM_F_MULTInumber

Multi-part message

NLM_F_NONRECnumber

Non-recursive operation

NLM_F_REPLACEnumber

Replace existing

NLM_F_REQUESTnumber

Request message

NLM_F_ROOTnumber

Root operation

NLM_F_STRICT_CHKnumber

Strict checking

Network configuration indices

Properties
NameTypeDescription
NETCONFA_IFINDEX_ALLnumber

All interfaces

NETCONFA_IFINDEX_DEFAULTnumber

Default interface

Port VDP responses

Properties
NameTypeDescription
PORT_VDP_RESPONSE_SUCCESSnumber

Success response

PORT_VDP_RESPONSE_INVALID_FORMATnumber

Invalid format response

PORT_VDP_RESPONSE_INSUFFICIENT_RESOURCESnumber

Insufficient resources response

PORT_VDP_RESPONSE_UNUSED_VTIDnumber

Unused VTID response

PORT_VDP_RESPONSE_VTID_VIOLATIONnumber

VTID violation response

PORT_VDP_RESPONSE_VTID_VERSION_VIOALTIONnumber

VTID version violation response

PORT_VDP_RESPONSE_OUT_OF_SYNCnumber

Out of sync response

Port profile responses

Properties
NameTypeDescription
PORT_PROFILE_RESPONSE_SUCCESSnumber

Success response

PORT_PROFILE_RESPONSE_INPROGRESSnumber

In progress response

PORT_PROFILE_RESPONSE_INVALIDnumber

Invalid response

PORT_PROFILE_RESPONSE_BADSTATEnumber

Bad state response

PORT_PROFILE_RESPONSE_INSUFFICIENT_RESOURCESnumber

Insufficient resources response

PORT_PROFILE_RESPONSE_ERRORnumber

Error response

Port request types

Properties
NameTypeDescription
PORT_REQUEST_PREASSOCIATEnumber

Pre-associate request

PORT_REQUEST_PREASSOCIATE_RRnumber

Pre-associate round-robin request

PORT_REQUEST_ASSOCIATEnumber

Associate request

PORT_REQUEST_DISASSOCIATEnumber

Disassociate request

Prefix types

Properties
NameTypeDescription
PREFIX_UNSPECnumber

Unspecified prefix

PREFIX_ADDRESSnumber

Address prefix

PREFIX_CACHEINFOnumber

Cache info prefix

Route commands

Properties
NameTypeDescription
RTM_BASEnumber

Base command

RTM_NEWLINKnumber

New link

RTM_DELLINKnumber

Delete link

RTM_GETLINKnumber

Get link

RTM_SETLINKnumber

Set link

RTM_NEWADDRnumber

New address

RTM_DELADDRnumber

Delete address

RTM_GETADDRnumber

Get address

RTM_NEWROUTEnumber

New route

RTM_DELROUTEnumber

Delete route

RTM_GETROUTEnumber

Get route

RTM_NEWRULEnumber

New rule

RTM_DELRULEnumber

Delete rule

RTM_GETRULEnumber

Get rule

RTM_NEWQDISCnumber

New queue discipline

RTM_DELQDISCnumber

Delete queue discipline

RTM_GETQDISCnumber

Get queue discipline

RTM_NEWTCLASSnumber

New traffic class

RTM_DELTCLASSnumber

Delete traffic class

RTM_GETTCLASSnumber

Get traffic class

RTM_NEWTFILTERnumber

New traffic filter

RTM_DELTFILTERnumber

Delete traffic filter

RTM_GETTFILTERnumber

Get traffic filter

RTM_NEWACTIONnumber

New action

RTM_DELACTIONnumber

Delete action

RTM_GETACTIONnumber

Get action

RTM_NEWPREFIXnumber

New prefix

RTM_GETMULTICASTnumber

Get multicast

RTM_GETANYCASTnumber

Get anycast

RTM_NEWNEIGHTBLnumber

New neighbor table

RTM_GETNEIGHTBLnumber

Get neighbor table

RTM_SETNEIGHTBLnumber

Set neighbor table

RTM_NEWNDUSEROPTnumber

New neighbor user option

RTM_NEWADDRLABELnumber

New address label

RTM_DELADDRLABELnumber

Delete address label

RTM_GETADDRLABELnumber

Get address label

RTM_GETDCBnumber

Get DCB

RTM_SETDCBnumber

Set DCB

RTM_NEWNETCONFnumber

New network configuration

RTM_DELNETCONFnumber

Delete network configuration

RTM_GETNETCONFnumber

Get network configuration

RTM_NEWMDBnumber

New multicast database

RTM_DELMDBnumber

Delete multicast database

RTM_GETMDBnumber

Get multicast database

RTM_NEWNSIDnumber

New network namespace ID

RTM_DELNSIDnumber

Delete network namespace ID

RTM_GETNSIDnumber

Get network namespace ID

RTM_NEWSTATSnumber

New statistics

RTM_GETSTATSnumber

Get statistics

RTM_NEWCACHEREPORTnumber

New cache report

RTM_NEWCHAINnumber

New chain

RTM_DELCHAINnumber

Delete chain

RTM_GETCHAINnumber

Get chain

RTM_NEWNEXTHOPnumber

New next hop

RTM_DELNEXTHOPnumber

Delete next hop

RTM_GETNEXTHOPnumber

Get next hop

RTM_NEWLINKPROPnumber

New link property

RTM_DELLINKPROPnumber

Delete link property

RTM_GETLINKPROPnumber

Get link property

RTM_NEWVLANnumber

New VLAN

RTM_DELVLANnumber

Delete VLAN

RTM_GETVLANnumber

Get VLAN

Route flags

Properties
NameTypeDescription
RTM_F_CLONEDnumber

Cloned route

RTM_F_EQUALIZEnumber

Equalize route

RTM_F_FIB_MATCHnumber

FIB match

RTM_F_LOOKUP_TABLEnumber

Lookup table

RTM_F_NOTIFYnumber

Notify

RTM_F_PREFIXnumber

Prefix

Route metrics

Properties
NameTypeDescription
RTAX_MTUnumber

Maximum transmission unit

RTAX_HOPLIMITnumber

Hop limit

RTAX_ADVMSSnumber

Advertised MSS

RTAX_REORDERINGnumber

Reordering

RTAX_RTTnumber

Round trip time

RTAX_WINDOWnumber

Window size

RTAX_CWNDnumber

Congestion window

RTAX_INITCWNDnumber

Initial congestion window

RTAX_INITRWNDnumber

Initial receive window

RTAX_FEATURESnumber

Features

RTAX_QUICKACKnumber

Quick acknowledgment

RTAX_CC_ALGOnumber

Congestion control algorithm

RTAX_RTTVARnumber

RTT variance

RTAX_SSTHRESHnumber

Slow start threshold

RTAX_FASTOPEN_NO_COOKIEnumber

Fast open no cookie

Route scopes

Properties
NameTypeDescription
RT_SCOPE_UNIVERSEnumber

Universe scope

RT_SCOPE_SITEnumber

Site scope

RT_SCOPE_LINKnumber

Link scope

RT_SCOPE_HOSTnumber

Host scope

RT_SCOPE_NOWHEREnumber

Nowhere scope

Route tables

Properties
NameTypeDescription
RT_TABLE_UNSPECnumber

Unspecified table

RT_TABLE_COMPATnumber

Compatibility table

RT_TABLE_DEFAULTnumber

Default table

RT_TABLE_MAINnumber

Main table

RT_TABLE_LOCALnumber

Local table

RT_TABLE_MAXnumber

Maximum table

Route types

Properties
NameTypeDescription
RTN_UNSPECnumber

Unspecified route

RTN_UNICASTnumber

Unicast route

RTN_LOCALnumber

Local route

RTN_BROADCASTnumber

Broadcast route

RTN_ANYCASTnumber

Anycast route

RTN_MULTICASTnumber

Multicast route

RTN_BLACKHOLEnumber

Blackhole route

RTN_UNREACHABLEnumber

Unreachable route

RTN_PROHIBITnumber

Prohibited route

RTN_THROWnumber

Throw route

RTN_NATnumber

NAT route

RTN_XRESOLVEnumber

External resolve route

Tunnel encapsulation flags

Properties
NameTypeDescription
TUNNEL_ENCAP_FLAG_CSUMnumber

Checksum flag

TUNNEL_ENCAP_FLAG_CSUM6number

IPv6 checksum flag

TUNNEL_ENCAP_FLAG_REMCSUMnumber

Remote checksum flag

Tunnel encapsulation types

Properties
NameTypeDescription
TUNNEL_ENCAP_NONEnumber

No encapsulation

TUNNEL_ENCAP_FOUnumber

Foo over UDP

TUNNEL_ENCAP_GUEnumber

Generic UDP Encapsulation

TUNNEL_ENCAP_MPLSnumber

MPLS encapsulation

VXLAN data frame flags

Properties
NameTypeDescription
VXLAN_DF_UNSETnumber

Data frame unset

VXLAN_DF_SETnumber

Data frame set

VXLAN_DF_INHERITnumber

Data frame inherit

VXLAN_DF_MAXnumber

Maximum data frame

XDP attach types

Properties
NameTypeDescription
XDP_ATTACHED_NONEnumber

Not attached

XDP_ATTACHED_DRVnumber

Driver attached

XDP_ATTACHED_SKBnumber

SKB attached

XDP_ATTACHED_HWnumber

Hardware attached

XDP_ATTACHED_MULTInumber

Multi attached