summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTING.md65
-rw-r--r--docs/contributing/vyos-api/index.rst7
-rw-r--r--docs/contributing/vyos-api/interface-config.rst278
-rw-r--r--docs/index.rst1
-rw-r--r--docs/routing/routing-policy.rst4
5 files changed, 339 insertions, 16 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 496659bb..7390c11f 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,14 +1,17 @@
# Contributor's Guide
1. fork the project on GitHub https://github.com/vyos/vyos-documentation
-2. clone the fork
-3. create a a new branch for your work. You can use a name that describes what you do.
+2. clone the fork to your local machine
```shell
- git checkout -b fix-vxlan-typo
+ $ git clone https://github.com/YOUR_USERNAME/vyos-documentation
+3. cd to your new local directory vyos-documentation
+4. create a a new branch for your work. You can use a name that describes what you do.
+ ```shell
+ $ git checkout -b fix-vxlan-typo
```
-4. make your changes.
+5. make your changes.
- Please check the documation, if you don't familiar with [sphinx-doc](http://http://www.sphinx-doc.org) or [reStructuredText](http://www.sphinx-doc.org/en/master/usage/restructuredtext/index.html)
+ Please check the documentation if you aren't familiar with [sphinx-doc](http://http://www.sphinx-doc.org) or [reStructuredText](http://www.sphinx-doc.org/en/master/usage/restructuredtext/index.html)
Note the following RFCs, which describe the reserved public IP addresses and autonomous system numbers for the documentation. [RFC5737](https://tools.ietf.org/html/rfc5737), [RFC3849](https://tools.ietf.org/html/rfc3849), [RFC5389](https://tools.ietf.org/html/rfc5398), [RFC7042](https://tools.ietf.org/html/rfc7042)
@@ -23,25 +26,59 @@
Please don't use other public address space.
+6. Check your changes by locally building the documentation
+ ```shell
+ $ cd docs
+ $ make html
+ ```
+ Sphinx will build the html files in the docs/_build folder
-5. add the modified files
+7. add the modified files
```shell
- git add path/to/filname
+ $ git add path/to/filname
```
or add all unstaged files
```shell
- git add .
+ $ git add .
````
-6. commit your changes
+8. commit your changes
```shell
- git commit -m "rename vxlan set syntax"
+ $ git commit -m "rename vxlan set syntax"
```
-7. push your commits to your GitHub project:
+9. push your commits to your GitHub project:
```shell
- git push -u origin fix-vxlan-typo
+ $ git push -u origin fix-vxlan-typo
```
-8. Submit a pull request.
+10. submit a pull request.
In GitHub, visit the main repository and you should see a banner
- suggesting to make a pull request. Fill out the form and describe what you do. \ No newline at end of file
+ suggesting to make a pull request. Fill out the form and describe what you do.
+
+11. once pull resquests have been approved, you may want to locally update your forked repository too. First you'll have to add the remote upstream repository.
+ ```shell
+ $ git remote add upstream https://github.com/vyos/vyos-documentation.git
+ ```
+
+ Check your configured remote repositories.
+ ```shell
+ $ git remote -v
+ origin https://github.com/YOUR_USERNAME/vyos-documentation.git (fetch)
+ origin https://github.com/YOUR_USERNAME/vyos.documentation.git (push)
+ upstream https://github.com/vyos/vyos-documentation.git (fetch)
+ upstream https://github.com/vyos/vyos-documentation.git (push)
+ ```
+
+ Your remote repo on Github is called Origin, while the original repo you have forked is called Upstream.
+
+ Now you can locally update your forked repo.
+ ```shell
+ $ git fetch upstream
+ $ git checkout master
+ $ git merge upstream/master
+ ```
+ If you want to update your fork on Github too:
+ ```shell
+ $ git push origin master
+ ```
+
diff --git a/docs/contributing/vyos-api/index.rst b/docs/contributing/vyos-api/index.rst
new file mode 100644
index 00000000..353401b0
--- /dev/null
+++ b/docs/contributing/vyos-api/index.rst
@@ -0,0 +1,7 @@
+.. _vyos-api_index:
+
+.. toctree::
+ :maxdepth: 2
+ :hidden:
+
+ interface-config
diff --git a/docs/contributing/vyos-api/interface-config.rst b/docs/contributing/vyos-api/interface-config.rst
new file mode 100644
index 00000000..547f7b8b
--- /dev/null
+++ b/docs/contributing/vyos-api/interface-config.rst
@@ -0,0 +1,278 @@
+.. _vyos_api:
+
+VyOS API Classes
+================
+
+
+Interface Config
+----------------
+
+This class contains the code to configure a network interfaces.
+Exceptions are being send to stdout if the debug flag is set within the environment, via ``export DEBUG=1``.
+It shows exception for executed commands and parses andd displays the exception output in a structured form.
+Value errors are always displayed, regardless of the presence of the ``DEBUG`` variable.
+
+
+Example how the ``DEBUG`` variable can be used.
+ .. code-block:: sh
+
+ #!/usr/bin/python3
+
+ from vyos.interfaceconfig import Interface
+
+ a = Interface("wg01", "fnord")
+ print (a.set_link_state("up"))
+
+
+ .. code-block:: sh
+
+ root@vyos:/home/vyos# ./example_script.py
+ RTNETLINK answers: Operation not supported
+
+ export DEBUG=1
+ root@vyos:/home/vyos# ./example_script.py
+
+ Exception raised:
+ command: ['ip link add dev wg01 type fnord']
+ error code: 2
+ subprocess output: RTNETLINK answers: Operation not supported
+
+
+Interface(interfacename, type=None)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+The interfacename is mandatory, if it is a virtual interface such as a wireguard interface or vlan, veth etc., the type can be assigned and the device is being created if it is a valid device.
+
+existing device:
+ .. code-block:: sh
+
+ #!/usr/bin/python3
+
+ from vyos.interfaceconfig import Interface
+
+ interface_instance = Interface("eth2")
+
+non-existing device which needs to be created:
+ .. code-block:: sh
+
+ #!/usr/bin/python3
+
+ from vyos.interfaceconfig import Interface
+
+ interface_instance = Interface("wg01", "wireguard")
+
+If a device creation has been successful, the return code is ``0`` otherwise ``None``.
+
+Interface alias
+^^^^^^^^^^^^^^^
+An interfaces ifalias variable is empty by default, but the variable is used for example by snmp. The parameter is optional and if not set, the default behavior is to use the interfacename of the instance, if set it uses the name set in the parameter.
+
+.. code-block:: sh
+
+ #!/usr/bin/python3
+
+ from vyos.interfaceconfig import Interface
+
+ interface_instance = Interface("eth2")
+ interface_instance.ifalias = "interface_alias"
+ print (interface_instance.ifalias)
+ print (interface_instance.get_alias())
+
+
+.. code-block:: sh
+
+ 4: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
+ link/ether 08:00:27:70:9c:a3 brd ff:ff:ff:ff:ff:ff
+ alias interface_alias
+
+get_alias()
+~~~~~~~~~~~
+Reads the ifalias variable directly from the /sys/class/net/<interface>/ifalias and can be used to determine in a config a new value and what value is set in in the system.
+
+del_alias()
+~~~~~~~~~~~
+Removes any content from the ifalias variable.
+
+Interface link state
+^^^^^^^^^^^^^^^^^^^^
+Sets an interface state either to adminitrativly up or down, regardless of the real connection status. If called without parameter, the default function is up, valid parameters are ``up`` or ``down``.
+
+
+.. code-block:: sh
+
+ ip link show dev eth2
+ 4: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
+
+
+.. code-block:: sh
+
+ #!/usr/bin/python3
+
+ from vyos.interfaceconfig import Interface
+
+ interface_instance = Interface("eth2")
+ interface_instance.linkstate = 'up'
+ print (interface_instance.linkstate)
+ print (interface_instance.get_link_state())
+
+
+.. code-block:: sh
+
+ ip link show dev eth2
+ 4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
+
+get_link_state()
+~~~~~~~~~~~~~~~~
+Returns the link status of an interface which can be either ``up``, ``down`` or ``unknown``. The link status ``unknown`` is often visible on uninitialized wireguard interfaces, once traffic was successfully sent and received it will change to state ``up``. However, it is not recommended to assume that wireguard is correctly configured by the interface status, since multiple peers can be configured on a single interface and if only 1 out of 10 is working, the interface status will shown as ``up``.
+
+
+remove_interface()
+^^^^^^^^^^^^^^^^^^
+Removes an interface from the system, given as parameter of the objects instance.
+
+Interface macaddress
+^^^^^^^^^^^^^^^^^^^^
+Sets the mac address on a network interface.
+
+.. code-block:: sh
+
+ interface_instance.linkstate = 'up'
+
+get_macaddr()
+~~~~~~~~~~~~~
+Returns the mac address of a network interface.
+
+Interface MTU
+^^^^^^^^^^^^^
+Sets the MTU on a network interface.
+
+.. code-block:: sh
+
+ interface_instance.mtu = 9000
+
+
+get_mtu(self)
+~~~~~~~~~~~~~
+Returns the MTU of a network interface.
+
+
+add_ipv4_addr(ipaddr=[]):
+^^^^^^^^^^^^^^^^^^^^^^^^^
+Adds IPv4 addresses given as parameter.
+
+.. code-block:: sh
+
+ #!/usr/bin/python3
+
+ from vyos.interfaceconfig import Interface
+
+ ips = ['10.100.100.1/24', '10.100.100.2/24', '10.100.100.3/24']
+ interface_instance = Interface("eth2")
+ interface_instance.add_ipv4_addr(ips)
+
+.. code-block:: sh
+
+ ip -4 -br addr sh dev eth2
+ eth2 UP 10.100.100.1/24 10.100.100.2/24 10.100.100.3/24
+
+
+del_ipv4_addr(ipaddr=[])
+^^^^^^^^^^^^^^^^^^^^^^^^
+Removes the IPs given in the parameter ``ipaddr``.
+
+def get_ipv4_addr()
+^^^^^^^^^^^^^^^^^^^
+Returns a list of all IPv4 addresses of an interface.
+
+
+.. code-block:: sh
+
+ #!/usr/bin/python3
+
+ from vyos.interfaceconfig import Interface
+
+ interface_instance = Interface("eth2")
+ ips = interface_instance.get_ipv4_addr()
+ print(ips)
+
+.. code-block:: sh
+
+ ['10.100.100.1', '10.100.100.2', '10.100.100.3']
+
+
+set_dhcpv4()
+^^^^^^^^^^^^
+Starts dhclient and sends DHCPREQUEST messages on the interface.
+
+del_dhcpv4()
+^^^^^^^^^^^^
+Stops dhclient on the interface.
+
+get_dhcpv4()
+^^^^^^^^^^^^
+Returns the pid of the dhclient process, if none is runing `False` is being returned and the message ``no dhcp client running on interface <interface>`` displayed on stdout.
+
+add_ipv6_addr(ipaddr=[])
+^^^^^^^^^^^^^^^^^^^^^^^^
+Adds IPv6 addresses given as parameter.
+
+.. code-block:: sh
+
+ #!/usr/bin/python3
+
+ from vyos.interfaceconfig import Interface
+
+ ips = ['2001:db8:dead::1/64', '2001:db8:beaf::1/64', '2001:db8:cafe::1/64']
+ interface_instance = Interface("eth2")
+ interface_instance.add_ipv6_addr(ips)
+
+.. code-block:: sh
+
+ ip -6 -br addr sh dev eth2
+ eth2 UP 2001:db8:cafe::1/64 2001:db8:beaf::1/64 2001:db8:dead::1/64 fe80::a00:27ff:fe70:9ca3/64
+
+del_ipv6_addr(ipaddr=[])
+^^^^^^^^^^^^^^^^^^^^^^^^
+Removes the IPv6 addresses given via the paramater ``ipaddr``.
+
+get_ipv6_addr()
+^^^^^^^^^^^^^^^
+Returns all IPv6 addresse set on the interface.
+
+.. code-block:: sh
+
+ #!/usr/bin/python3
+
+ from vyos.interfaceconfig import Interface
+
+ interface_instance = Interface("eth2")
+ ips = interface_instance.get_ipv6_addr()
+ print(ips)
+
+.. code-block:: sh
+
+ ['2001:db8:cafe::1', '2001:db8:beaf::1', '2001:db8:dead::1', 'fe80::a00:27ff:fe70:9ca3']
+
+
+set_dhcpv6()
+^^^^^^^^^^^^
+It enables stateful IPv6 deployments on the given interface. The interface will stop to listen to route annoncements (RA's) and requests that parameter via dhcpv6.
+DHCPv4 and DHCPv6 can be configured simultaniously on the interface.
+
+.. code-block:: sh
+
+ #!/usr/bin/python3
+
+ from vyos.interfaceconfig import Interface
+
+ interface_instance = Interface("eth2")
+ interface_instance.set_dhcpv4()
+ interface_instance.set_dhcpv6()
+
+del_dhcpv6()
+^^^^^^^^^^^^
+Stops dhclient and starts listen and acceptiing RA's again.
+
+get_dhcpv6()
+^^^^^^^^^^^^
+Returns the pid of the running dhclient process or None if it doesn't exist.
+
diff --git a/docs/index.rst b/docs/index.rst
index 58461850..20a7bcbf 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -53,5 +53,6 @@ as a router and firewall platform for cloud deployments.
build-vyos.rst
contributing/index.rst
+ contributing/vyos-api/index.rst
diff --git a/docs/routing/routing-policy.rst b/docs/routing/routing-policy.rst
index 253dd980..f1b7d778 100644
--- a/docs/routing/routing-policy.rst
+++ b/docs/routing/routing-policy.rst
@@ -22,8 +22,8 @@ Routing Policy Example
set policy route-map setmet rule 2 set as-path-prepend '2 2 2'
#Apply policy to BGP
- set protocols bgp 1 neighbor 1.1.1.2 route-map import 'setmet'
- set protocols bgp 1 neighbor 1.1.1.2 soft-reconfiguration 'inbound' <<<< ***
+ set protocols bgp 1 neighbor 1.1.1.2 address-family ipv4-unicast route-map import 'setmet'
+ set protocols bgp 1 neighbor 1.1.1.2 address-family ipv4-unicast soft-reconfiguration 'inbound' <<<< ***
*** get policy update without bouncing the neighbor