Class: Nl::Linux::Wireguard

Inherits:
Genl::Family show all
Defined in:
nl-linux/generated/nl/linux/wireguard.rb

Overview

Netlink protocol to control WireGuard network devices.

The below enums and macros are for interfacing with WireGuard, using generic netlink, with family WG_GENL_NAME and version WG_GENL_VERSION. It defines two commands: get and set. Note that while they share many common attributes, these two commands actually accept a slightly different set of inputs and outputs. These differences are noted under the individual attributes.

Defined Under Namespace

Modules: AttributeSets, Constants, Flags, Messages, Notifications, Structs Classes: AsyncOperations

Constant Summary collapse

NAME =
"wireguard"
VERSION =
1

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Genl::Family

version

Class Method Details

.open(resolver: ::Nl::Linux::DEFAULT_RESOLVER, executor: nil, notification_capacity: DEFAULT_NOTIFICATION_CAPACITY) ⇒ Wireguard .open(resolver: ::Nl::Linux::DEFAULT_RESOLVER, executor: nil, notification_capacity: DEFAULT_NOTIFICATION_CAPACITY) {|family| ... } ⇒ Object

Overloads:

  • .open(resolver: ::Nl::Linux::DEFAULT_RESOLVER, executor: nil, notification_capacity: DEFAULT_NOTIFICATION_CAPACITY) ⇒ Wireguard

    Parameters:

    • resolver (#call) (defaults to: ::Nl::Linux::DEFAULT_RESOLVER)
    • executor (Symbol, nil) (defaults to: nil)
    • notification_capacity (Integer, nil) (defaults to: DEFAULT_NOTIFICATION_CAPACITY)

    Returns:

  • .open(resolver: ::Nl::Linux::DEFAULT_RESOLVER, executor: nil, notification_capacity: DEFAULT_NOTIFICATION_CAPACITY) {|family| ... } ⇒ Object

    Returns the result of the block.

    Parameters:

    • resolver (#call) (defaults to: ::Nl::Linux::DEFAULT_RESOLVER)
    • executor (Symbol, nil) (defaults to: nil)
    • notification_capacity (Integer, nil) (defaults to: DEFAULT_NOTIFICATION_CAPACITY)

    Yield Parameters:

    Returns:

    • (Object) —

      the result of the block



33
34
35
# File 'nl-linux/generated/nl/linux/wireguard.rb', line 33

def self.open(resolver: ::Nl::Linux::DEFAULT_RESOLVER, executor: nil, notification_capacity: DEFAULT_NOTIFICATION_CAPACITY)
  super
end

Instance Method Details

#async(stream_capacity: nil) ⇒ AsyncOperations

Returns the asynchronous operation facade for this family.

Parameters:

  • stream_capacity (::Integer, nil) (defaults to: nil)

Returns:



854
855
856
857
# File 'nl-linux/generated/nl/linux/wireguard.rb', line 854

def async(stream_capacity: nil)
  return @async_operations ||= build_async_facade(AsyncOperations) if stream_capacity.nil?
  build_async_facade(AsyncOperations, stream_capacity:)
end

#do_set_device(**args) ⇒ void

This method returns an undefined value.

Set WireGuard device


This command should be called with a wgdevice set, containing one but
not both of ``WGDEVICE_A_IFINDEX`` and ``WGDEVICE_A_IFNAME``.

It is possible that the amount of configuration data exceeds that of the
maximum message length accepted by the kernel. In that case, several
messages should be sent one after another, with each successive one
filling in information not contained in the prior. Note that if
``WGDEVICE_F_REPLACE_PEERS`` is specified in the first message, it
probably should not be specified in fragments that come after, so that
the list of peers is only cleared the first time but appended after.
Likewise for peers, if ``WGPEER_F_REPLACE_ALLOWEDIPS`` is specified in
the first message of a peer, it likely should not be specified in
subsequent fragments.

If an error occurs, ``NLMSG_ERROR`` will reply containing an errno.


Requires CAP_NET_ADMIN in the user namespace owning the network namespace.

Parameters:

  • args (Hash)

Options Hash (**args):

  • ifindex (Integer)
  • ifname (String)
  • private_key (String) —

    Set to all zeros to remove.

  • public_key (String)
  • flags (Integer) —

    0 or WGDEVICE_F_REPLACE_PEERS if all current peers should be removed prior to adding the list below.

    Known flags are defined in Nl::Linux::Wireguard::Flags::WgdeviceFlags.

  • listen_port (Integer) —

    Set as 0 to choose randomly.

  • fwmark (Integer) —

    Set as 0 to disable.

  • peers (Array<AttributeSets::Wgpeer, Hash<Symbol, Object>>) —

    The index/type parameter is unused on SET_DEVICE operations and is zero on GET_DEVICE operations.

See Also:



764
765
766
# File 'nl-linux/generated/nl/linux/wireguard.rb', line 764

def do_set_device(**args)
  exchange_message(:"do", Messages::DoSetDeviceRequest, nil, args)
end

#dump_get_device(**args) ⇒ Array<Messages::DumpGetDeviceReply> #dump_get_device(**args) {|reply| ... } ⇒ void

Retrieve WireGuard device


The command should be called with one but not both of:

- ``WGDEVICE_A_IFINDEX``
- ``WGDEVICE_A_IFNAME``

The kernel will then return several messages (``NLM_F_MULTI``). It is
possible that all of the allowed IPs of a single peer will not fit
within a single netlink message. In that case, the same peer will be
written in the following message, except it will only contain
``WGPEER_A_PUBLIC_KEY`` and ``WGPEER_A_ALLOWEDIPS``. This may occur
several times in a row for the same peer. It is then up to the receiver
to coalesce adjacent peers. Likewise, it is possible that all peers will
not fit within a single message. So, subsequent peers will be sent in
following messages, except those will only contain ``WGDEVICE_A_IFNAME``
and ``WGDEVICE_A_PEERS``. It is then up to the receiver to coalesce
these messages to form the complete list of peers.

Since this is an ``NLA_F_DUMP`` command, the final message will always
be ``NLMSG_DONE``, even if an error occurs. However, this ``NLMSG_DONE``
message contains an integer error code. It is either zero or a negative
error code corresponding to the errno.


Requires CAP_NET_ADMIN in the user namespace owning the network namespace.

Overloads:

  • #dump_get_device(**args) ⇒ Array<Messages::DumpGetDeviceReply>

    Returns an array when no block is given.

    Parameters:

    • args (Hash)

    Options Hash (**args):

    • ifindex (Integer)
    • ifname (String)

    Returns:

  • #dump_get_device(**args) {|reply| ... } ⇒ void

    This method returns an undefined value.

    Yields each reply when a block is given.

    Parameters:

    • args (Hash)

    Options Hash (**args):

    • ifindex (Integer)
    • ifname (String)

    Yield Parameters:

See Also:



723
724
725
# File 'nl-linux/generated/nl/linux/wireguard.rb', line 723

def dump_get_device(**args, &block)
  exchange_message(:"dump", Messages::DumpGetDeviceRequest, Messages::DumpGetDeviceReply, args, &block)
end