Documentation ¶
Overview ¶
Package nll2tp provides Go bindings for the Linux L2TP GeNetlink API
Index ¶
- Constants
- type Conn
- func (c *Conn) Close()
- func (c *Conn) CreateManagedTunnel(fd int, config *TunnelConfig) (err error)
- func (c *Conn) CreateSession(config *SessionConfig) error
- func (c *Conn) CreateStaticTunnel(localAddr []byte, localPort uint16, peerAddr []byte, peerPort uint16, ...) (err error)
- func (c *Conn) DeleteSession(config *SessionConfig) error
- func (c *Conn) DeleteTunnel(config *TunnelConfig) error
- func (c *Conn) GetSessionInfo(config *SessionConfig) (*SessionInfo, error)
- type L2tpDebugFlags
- type L2tpEncapType
- type L2tpL2specType
- type L2tpProtocolVersion
- type L2tpPwtype
- type L2tpSeqmode
- type L2tpSessionID
- type L2tpTunnelID
- type SessionConfig
- type SessionInfo
- type SessionStatistics
- type TunnelConfig
Constants ¶
const ( // CmdMax as defined in nll2tp/l2tp.h:90 CmdMax = -1 // AttrMax as defined in nll2tp/l2tp.h:135 AttrMax = -1 // AttrStatsMax as defined in nll2tp/l2tp.h:152 AttrStatsMax = -1 // GenlName as defined in nll2tp/l2tp.h:198 GenlName = "l2tp" // GenlVersion as defined in nll2tp/l2tp.h:199 GenlVersion = 0x1 // GenlMcgroup as defined in nll2tp/l2tp.h:200 GenlMcgroup = "l2tp" )
const ( // CmdNoop as declared in nll2tp/l2tp.h:78 CmdNoop = iota // CmdTunnelCreate as declared in nll2tp/l2tp.h:79 CmdTunnelCreate = 1 // CmdTunnelDelete as declared in nll2tp/l2tp.h:80 CmdTunnelDelete = 2 // CmdTunnelModify as declared in nll2tp/l2tp.h:81 CmdTunnelModify = 3 // CmdTunnelGet as declared in nll2tp/l2tp.h:82 CmdTunnelGet = 4 // CmdSessionCreate as declared in nll2tp/l2tp.h:83 CmdSessionCreate = 5 // CmdSessionDelete as declared in nll2tp/l2tp.h:84 CmdSessionDelete = 6 // CmdSessionModify as declared in nll2tp/l2tp.h:85 CmdSessionModify = 7 // CmdSessionGet as declared in nll2tp/l2tp.h:86 CmdSessionGet = 8 )
const ( // AttrNone as declared in nll2tp/l2tp.h:96 AttrNone = iota // AttrPwType as declared in nll2tp/l2tp.h:97 AttrPwType = 1 // AttrEncapType as declared in nll2tp/l2tp.h:98 AttrEncapType = 2 // AttrOffset as declared in nll2tp/l2tp.h:99 AttrOffset = 3 // AttrDataSeq as declared in nll2tp/l2tp.h:100 AttrDataSeq = 4 // AttrL2specType as declared in nll2tp/l2tp.h:101 AttrL2specType = 5 // AttrL2specLen as declared in nll2tp/l2tp.h:102 AttrL2specLen = 6 // AttrProtoVersion as declared in nll2tp/l2tp.h:103 AttrProtoVersion = 7 // AttrIfname as declared in nll2tp/l2tp.h:104 AttrIfname = 8 // AttrConnId as declared in nll2tp/l2tp.h:105 AttrConnId = 9 // AttrPeerConnId as declared in nll2tp/l2tp.h:106 AttrPeerConnId = 10 // AttrSessionId as declared in nll2tp/l2tp.h:107 AttrSessionId = 11 // AttrPeerSessionId as declared in nll2tp/l2tp.h:108 AttrPeerSessionId = 12 // AttrUdpCsum as declared in nll2tp/l2tp.h:109 AttrUdpCsum = 13 // AttrVlanId as declared in nll2tp/l2tp.h:110 AttrVlanId = 14 // AttrCookie as declared in nll2tp/l2tp.h:111 AttrCookie = 15 // AttrPeerCookie as declared in nll2tp/l2tp.h:112 AttrPeerCookie = 16 // AttrDebug as declared in nll2tp/l2tp.h:113 AttrDebug = 17 // AttrRecvSeq as declared in nll2tp/l2tp.h:114 AttrRecvSeq = 18 // AttrSendSeq as declared in nll2tp/l2tp.h:115 AttrSendSeq = 19 // AttrLnsMode as declared in nll2tp/l2tp.h:116 AttrLnsMode = 20 // AttrUsingIpsec as declared in nll2tp/l2tp.h:117 AttrUsingIpsec = 21 // AttrRecvTimeout as declared in nll2tp/l2tp.h:118 AttrRecvTimeout = 22 // AttrFd as declared in nll2tp/l2tp.h:119 AttrFd = 23 // AttrIpSaddr as declared in nll2tp/l2tp.h:120 AttrIpSaddr = 24 // AttrIpDaddr as declared in nll2tp/l2tp.h:121 AttrIpDaddr = 25 // AttrUdpSport as declared in nll2tp/l2tp.h:122 AttrUdpSport = 26 // AttrUdpDport as declared in nll2tp/l2tp.h:123 AttrUdpDport = 27 // AttrMtu as declared in nll2tp/l2tp.h:124 AttrMtu = 28 // AttrMru as declared in nll2tp/l2tp.h:125 AttrMru = 29 // AttrStats as declared in nll2tp/l2tp.h:126 AttrStats = 30 // AttrIp6Saddr as declared in nll2tp/l2tp.h:127 AttrIp6Saddr = 31 // AttrIp6Daddr as declared in nll2tp/l2tp.h:128 AttrIp6Daddr = 32 // AttrUdpZeroCsum6Tx as declared in nll2tp/l2tp.h:129 AttrUdpZeroCsum6Tx = 33 // AttrUdpZeroCsum6Rx as declared in nll2tp/l2tp.h:130 AttrUdpZeroCsum6Rx = 34 // AttrPad as declared in nll2tp/l2tp.h:131 AttrPad = 35 )
const ( // AttrStatsNone as declared in nll2tp/l2tp.h:139 AttrStatsNone = iota // AttrTxPackets as declared in nll2tp/l2tp.h:140 AttrTxPackets = 1 // AttrTxBytes as declared in nll2tp/l2tp.h:141 AttrTxBytes = 2 // AttrTxErrors as declared in nll2tp/l2tp.h:142 AttrTxErrors = 3 // AttrRxPackets as declared in nll2tp/l2tp.h:143 AttrRxPackets = 4 // AttrRxBytes as declared in nll2tp/l2tp.h:144 AttrRxBytes = 5 // AttrRxSeqDiscards as declared in nll2tp/l2tp.h:145 AttrRxSeqDiscards = 6 // AttrRxOosPackets as declared in nll2tp/l2tp.h:146 AttrRxOosPackets = 7 // AttrRxErrors as declared in nll2tp/l2tp.h:147 AttrRxErrors = 8 // AttrStatsPad as declared in nll2tp/l2tp.h:148 AttrStatsPad = 9 )
const ( PwtypeNone = 0x0000 PwtypeEthVlan = 0x0004 PwtypeEth = 0x0005 PwtypePpp = 0x0007 PwtypePppAc = 0x0008 PwtypeIp = 0x000b )
L2tpPwtype enumeration from nll2tp/l2tp.h:154
const ( L2spectypeNone = iota L2spectypeDefault = 1 )
L2tpL2specType enumeration from nll2tp/l2tp.h:164
const ( EncaptypeUdp = iota EncaptypeIp = 1 )
L2tpEncapType enumeration from nll2tp/l2tp.h:169
const ( SeqNone = iota SeqIp = 1 SeqAll = 2 )
L2tpSeqmode enumeration from nll2tp/l2tp.h:174
const ( MsgDebug = (1 << 0) MsgControl = (1 << 1) MsgSeq = (1 << 2) MsgData = (1 << 3) )
L2tpDebugFlags enumeration from nll2tp/l2tp.h:188
const ( // ProtocolVersion2 specifies L2TPv2 RFC2661 ProtocolVersion2 = 2 // ProtocolVersion3 specifies L2TPv3 RFC3931 ProtocolVersion3 = 3 )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Conn ¶
type Conn struct {
// contains filtered or unexported fields
}
Conn represents the genetlink L2TP connection to the kernel.
func (*Conn) CreateManagedTunnel ¶
func (c *Conn) CreateManagedTunnel(fd int, config *TunnelConfig) (err error)
CreateManagedTunnel creates a new managed tunnel instance in the kernel. A "managed" tunnel is one whose tunnel socket fd is created and managed by a userspace process. A managed tunnel's lifetime is bound by the lifetime of the tunnel socket fd, and may optionally be destroyed using explicit netlink commands.
func (*Conn) CreateSession ¶
func (c *Conn) CreateSession(config *SessionConfig) error
CreateSession creates a session instance in the kernel. The parent tunnel instance referenced by the tunnel IDs in the session configuration must already exist in the kernel.
func (*Conn) CreateStaticTunnel ¶
func (c *Conn) CreateStaticTunnel( localAddr []byte, localPort uint16, peerAddr []byte, peerPort uint16, config *TunnelConfig) (err error)
CreateStaticTunnel creates a new static tunnel instance in the kernel. A "static" tunnel is one whose tunnel socket fd is implicitly created by the kernel. A static tunnel must be explicitly deleted using netlink commands.
func (*Conn) DeleteSession ¶
func (c *Conn) DeleteSession(config *SessionConfig) error
DeleteSession deletes a session instance from the kernel.
func (*Conn) DeleteTunnel ¶
func (c *Conn) DeleteTunnel(config *TunnelConfig) error
DeleteTunnel deletes a tunnel instance from the kernel. Deleting a tunnel instance implicitly destroys any sessions running in that tunnel.
func (*Conn) GetSessionInfo ¶
func (c *Conn) GetSessionInfo(config *SessionConfig) (*SessionInfo, error)
GetSessionInfo retrieves dataplane session information from the kernel.
type L2tpProtocolVersion ¶
type L2tpProtocolVersion uint32
L2tpProtocolVersion describes the RFC version of the tunnel: L2TPv2 is described by RFC2661, while L2TPv3 is described by RFC3931.
type L2tpSessionID ¶
type L2tpSessionID uint32
L2tpSessionID represents the numeric identifier of an L2TP session. This ID is used in L2TP control and data packet headers and AVPs, and is unique to the tunnel for L2TPv2, or the host for L2TPv3.
type L2tpTunnelID ¶
type L2tpTunnelID uint32
L2tpTunnelID represents the numeric identifier of an L2TP tunnel. This ID is used in L2TP control and data packet headers and AVPs, and is unique to the host.
type SessionConfig ¶
type SessionConfig struct { // Tid is the host's L2TP ID for the tunnel containing the session. Tid L2tpTunnelID // Ptid is the peer's L2TP ID for the tunnel containing the session. Ptid L2tpTunnelID // Sid is the host's L2TP ID for the session. Sid L2tpSessionID // Psid is the peer's L2TP ID for the session. Psid L2tpSessionID // PseudowireType specifies the type of traffic carried by the session. // For L2TPv3 this may be PPP or Ethernet. // For L2TPv2 this may be PPP only. PseudowireType L2tpPwtype // SendSeq controls whether to send data packet sequence numbers per RFC2661 section 5.4. SendSeq bool // RecvSeq if set will cause data packets without sequence numbers to be dropped. RecvSeq bool // IsLNS if unset allows the LNS to enable data packet sequence numbers per RFC2661 section 5.4 IsLNS bool // ReorderTimeout sets the maximum amount of time, in milliseconds, to hold a data packet // in the reorder queue when sequence numbers are enabled. ReorderTimeout uint64 // LocalCookie sets the RFC3931 cookie for the session. // Transmitted data packets will include the cookie. // The LocalCookie may be either 4 or 8 bytes in length if set. LocalCookie []byte // PeerCookie sets the RFC3931 peer cookie for the session as negotiated by the control protocol. // Received data packets with a cookie mismatch are discarded. // The PeerCookie may be either 4 or 8 bytes in length if set. PeerCookie []byte // IfName use depends on the pseudowire type. // For an RFC3931 Ethernet pseudowire, IfName specifies the interface name to use for // the L2TP Ethernet interface. By default the kernel generates a name "l2tpethX". // For an RFC2661 PPP/AC pseudowire, IfName specifies the name of the interface associated // with the PPPoE session. IfName string // L2SpecType specifies the Layer 2 specific sublayer field to be used in data packets // as per RFC3931 section 3.2.2 L2SpecType L2tpL2specType // DebugFlags specifies the kernel debugging flags to use for the session instance. DebugFlags L2tpDebugFlags }
SessionConfig encapsulates genetlink parameters for L2TP session commands.
type SessionInfo ¶
type SessionInfo struct { // Tid is the host's L2TP ID for the tunnel containing the session. Tid L2tpTunnelID // Ptid is the peer's L2TP ID for the tunnel containing the session. Ptid L2tpTunnelID // Sid is the host's L2TP ID for the session. Sid L2tpSessionID // Psid is the peer's L2TP ID for the session. Psid L2tpSessionID // IfName is the assigned interface name for this session. IfName string // LocalCookie is the RFC3931 cookie for the session. LocalCookie []byte // PeerCookie is the RFC3931 peer cookie for the session. PeerCookie []byte // SendSeq is true if session is sending data packet sequence numbers per RFC2661 section 5.4. SendSeq bool // RecvSeq is true if session is dropping data packets received without sequence numbers. RecvSeq bool // LnsMode is true if the session is running as server. If running as server // the session will not permit the peer to control data sequence number settings. LnsMode bool // UsingIPSec is true if the session is using IPSec. UsingIPSec bool // ReorderTimeout is the maximum amount of time to hold a data packet in the reorder // queue when sequence numbers are enabled. This number is defined in milliseconds. ReorderTimeout uint64 // Statistics is the current dataplane tx/rx stats. Statistics SessionStatistics }
SessionInfo encapsulates dataplane session information provided by the kernel.
type SessionStatistics ¶
type SessionStatistics struct { // TxPacketCount is the number of data packets the session has transmitted. TxPacketCount uint64 // TxBytes is the number of data bytes the session has transmitted. TxBytes uint64 // TxErrorCount is the number of transmission errors the session has recorded. TxErrorCount uint64 // RxPacketCount is the number of data packets the session has received. RxPacketCount uint64 // RxBytes is the number of data bytes the session has received. RxBytes uint64 // RxErrorCount is the number of receive errors the session has recorded. RxErrorCount uint64 // RxSeqDiscardCount is the number of packets the session has discarded due to sequence errors. // For example, if the session is in LNS mode, has requested sequence numbers, and the client // isn't sending them. RxSeqDiscardCount uint64 // RxOOSCount is the number of packets the session has received out of sequence if data packet // reordering is enabled. RxOOSCount uint64 }
SessionStatistics includes statistics on dataplane receive and transmit.
type TunnelConfig ¶
type TunnelConfig struct { // Tid is the host's L2TP ID for the tunnel. Tid L2tpTunnelID // Ptid is the peer's L2TP ID for the tunnel Ptid L2tpTunnelID // Version is the tunnel protocol version (L2TPv2 or L2TPv3) Version L2tpProtocolVersion // Encap specifies the tunnel encapsulation type. // For L2TPv3 this may be UDP or IP. // For L2TPv2 this may only be UDP. Encap L2tpEncapType // DebugFlags specifies the kernel debugging flags to use for the tunnel instance. DebugFlags L2tpDebugFlags }
TunnelConfig encapsulates genetlink parameters for L2TP tunnel commands.