Commit Graph
3974 Commits
Author SHA1 Message Date
Joachim WibergandTobias Waldekranz d4820b598b Fix SSH hostkey generation and verification
This change addresses a problem accessing Infix over SSH.  The root cause
turned out to be the hostkeys, which live in /var/lib/ssh and not in /etc
on Infix, were corrupt.

The corruption was interesting in that they all existed, but had size 0.
This state was not caught by our ssh-genhostkeys script and that is what
this change attempts to fix.

As before this change, the script starts by calling `sshd -t` to verify
they hostkeys.  Unlike before we now check for 'invalid format' in the
output of that command.  If any file with invalid format is found, we
remove them and regenerate the hostkeys.

In this investigation it was found that the 'ssh-keygen -A' command that
generates hostkeys does not use the directories specified for the given
files in sshd_config, instead it always saves the files to /etc/ssh.

Also, since there is no panic in getting the hostkeys generated we can
allow the script to wait for syslogd to start before we run, even though
it all happens in runlevel S.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-10-09 10:41:46 +02:00
Joachim Wiberg 6583b1e451 .github: simplify Bob's workflow and don't move latest tag [skip ci]
We only want Bob to run when PR's have been merged to main, this means
when something is pushed to main.  (Took a while to figure this one out
actually.)  See the following community discussion for details:

https://github.com/orgs/community/discussions/26724#discussioncomment-3253102

Also, we've seen that moving the 'latest' tag messes up any push/pull/sync
operation between clones and forks, so let's skip it and see how that works.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-10-03 13:39:56 +02:00
Richard AlpeandRichard Alpe e11c46dc94 statd: handle IP origin for IPv6 RA
Handle IPv6 Router Advertisement (RA) based addresses.

If the last 64 bits of a link-local address is generated using the
local MAC address of the interface, i.e. a EUI-64 based address. Then
the origin is set to "link-layer".

If the addrgenmode is set to "random" instead of "eui64", then the
device will generate the interface identifier portion of the address
(the last 64 bits) randomly rather than deriving it from the MAC
address using the EUI-64 process. This will result in a "random"
origin.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-10-03 11:13:21 +02:00
Joachim Wiberg d8494e30d2 Add support for setting and fetching IPv4/IPv6 interface MTU
Setting the link MTU in Linux changes the sysctl IPV6 MTU, so we have to
set the IPv6 MTU on each run in case the IPv4 MTU changes.  Hence, this
also means the IPv6 MTU must be set *after* the IPv4 (link) MTU.

statd has been updated to read the sysctl setting for IPv6 MTU.

Notice how the loopback interface is unsupported for config + status.

Fixes issue #151

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-10-03 10:46:17 +02:00
Joachim Wiberg 1b58114891 configs: update minimal defconfig, add pwgen + python
We should really drop minimal defconfig entirely, see issue #127.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-10-03 10:46:17 +02:00
Richard AlpeandJoachim Wiberg 7ee49e60a5 .github: use gh result file in separate run cmd
Use the new fancy result-gh.md file which as github emojis. Also,
split result publishing to its own run command to simplify the YAML
file.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-10-02 11:22:47 +02:00
Richard AlpeandJoachim Wiberg ac0ef1d179 Bump 9pm submodule
> 9pm: add new result file with github emojis
> 9pm.py: expose ROOT_PATH to tests via env
> lib_tcl: improve handling of extra ssh args from test
> 9pm: fix evaluation of <base> option in nested suite
> .github: publish test result md in github
> 9pm: resolve <scratch> in suite option

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-10-02 11:22:47 +02:00
Joachim Wiberg a91f8d0e3f Update ChangeLog for v23.09 development release
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
v23.09.0
2023-10-02 10:35:34 +02:00
Jon-Olov VatnandJoachim Wiberg 5976ecd163 Add deviations for MTU configuration (IPv4/IPv6) in ietf-ip.yang
MTU configuration/status not yet implemented in Infix, thus
deviations added.
2023-10-02 09:40:56 +02:00
Joachim Wiberg 784c175ba3 .github: disable force push in sync
Branch protection rules on forks may cause this action to fail. [skip ci]

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-26 06:51:10 +02:00
Joachim Wiberg f58a726604 test: Bump docker container 0.6 -> 0.7, now with socat
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-25 19:16:33 +02:00
Joachim Wiberg 400788252f test: bump PyYAML 5.4.1 -> 6.0.1 to fix buid error
Collecting pyyaml==5.4.1 (from -r /root/pip-requirements.txt (line 6))
  Downloading PyYAML-5.4.1.tar.gz (175 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 175.1/175.1 kB 16.2 MB/s eta 0:00:00
  Installing build dependencies: started
  Installing build dependencies: finished with status 'done'
  Getting requirements to build wheel: started
  Getting requirements to build wheel: finished with status 'error'
  error: subprocess-exited-with-error

  × Getting requirements to build wheel did not run successfully.
  │ exit code: 1
  ╰─> [68 lines of output]
      /tmp/pip-build-env-smwadpdr/overlay/lib/python3.11/site-packages/setuptools/config/setupcfg.py:293: _DeprecatedConfig: Deprecated config in `setup.cfg`
      !!

              ********************************************************************************
              The license_file parameter is deprecated, use license_files instead.

              By 2023-Oct-30, you need to update your project and remove deprecated calls
              or your builds will no longer be supported.

              See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details.
              ********************************************************************************

      !!
        parsed = self.parsers.get(option_name, lambda x: x)(value)
      running egg_info
      writing lib3/PyYAML.egg-info/PKG-INFO
      writing dependency_links to lib3/PyYAML.egg-info/dependency_links.txt
      writing top-level names to lib3/PyYAML.egg-info/top_level.txt
      Traceback (most recent call last):
        File "/root/.infix-test-venv/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
          main()
        File "/root/.infix-test-venv/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/root/.infix-test-venv/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 118, in get_requires_for_build_wheel
          return hook(config_settings)
                 ^^^^^^^^^^^^^^^^^^^^^
        File "/tmp/pip-build-env-smwadpdr/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 355, in get_requires_for_build_wheel
          return self._get_build_requires(config_settings, requirements=['wheel'])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/tmp/pip-build-env-smwadpdr/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 325, in _get_build_requires
          self.run_setup()
        File "/tmp/pip-build-env-smwadpdr/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 341, in run_setup
          exec(code, locals())
        File "<string>", line 271, in <module>
        File "/tmp/pip-build-env-smwadpdr/overlay/lib/python3.11/site-packages/setuptools/__init__.py", line 103, in setup
          return distutils.core.setup(**attrs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/tmp/pip-build-env-smwadpdr/overlay/lib/python3.11/site-packages/setuptools/_distutils/core.py", line 185, in setup
          return run_commands(dist)
                 ^^^^^^^^^^^^^^^^^^
        File "/tmp/pip-build-env-smwadpdr/overlay/lib/python3.11/site-packages/setuptools/_distutils/core.py", line 201, in run_commands
          dist.run_commands()
        File "/tmp/pip-build-env-smwadpdr/overlay/lib/python3.11/site-packages/setuptools/_distutils/dist.py", line 969, in run_commands
          self.run_command(cmd)
        File "/tmp/pip-build-env-smwadpdr/overlay/lib/python3.11/site-packages/setuptools/dist.py", line 989, in run_command
          super().run_command(command)
        File "/tmp/pip-build-env-smwadpdr/overlay/lib/python3.11/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
          cmd_obj.run()
        File "/tmp/pip-build-env-smwadpdr/overlay/lib/python3.11/site-packages/setuptools/command/egg_info.py", line 318, in run
          self.find_sources()
        File "/tmp/pip-build-env-smwadpdr/overlay/lib/python3.11/site-packages/setuptools/command/egg_info.py", line 326, in find_sources
          mm.run()
        File "/tmp/pip-build-env-smwadpdr/overlay/lib/python3.11/site-packages/setuptools/command/egg_info.py", line 548, in run
          self.add_defaults()
        File "/tmp/pip-build-env-smwadpdr/overlay/lib/python3.11/site-packages/setuptools/command/egg_info.py", line 586, in add_defaults
          sdist.add_defaults(self)
        File "/tmp/pip-build-env-smwadpdr/overlay/lib/python3.11/site-packages/setuptools/command/sdist.py", line 113, in add_defaults
          super().add_defaults()
        File "/tmp/pip-build-env-smwadpdr/overlay/lib/python3.11/site-packages/setuptools/_distutils/command/sdist.py", line 251, in add_defaults
          self._add_defaults_ext()
        File "/tmp/pip-build-env-smwadpdr/overlay/lib/python3.11/site-packages/setuptools/_distutils/command/sdist.py", line 336, in _add_defaults_ext
          self.filelist.extend(build_ext.get_source_files())
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "<string>", line 201, in get_source_files
        File "/tmp/pip-build-env-smwadpdr/overlay/lib/python3.11/site-packages/setuptools/_distutils/cmd.py", line 107, in __getattr__
          raise AttributeError(attr)
      AttributeError: cython_sources
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error

× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> See above for output.

note: This error originates from a subprocess, and is likely not a problem with pip.
The command '/bin/sh -c ~/init-venv.sh ~/pip-requirements.txt' returned a non-zero code: 1

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-25 19:16:33 +02:00
Joachim Wiberg 5b5ca862dd test: update Dockerfile to install socat and ssdp[cli]
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-25 19:16:29 +02:00
Joachim Wiberg d0f1885ac5 cli: do password encrypt, change default hash, md5 -> sha512
[skip ci]

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-25 18:57:10 +02:00
Joachim Wiberg 0d311cc94f test: set 9pm LOG_PATH to create GitHub action summary from last log
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-25 17:58:09 +02:00
Richard AlpeandRichard Alpe c3c1ccc837 statd: split code into multiple files (cosmetic)
Mainly in preparation for upcoming patches for ethtool.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-25 15:27:37 +02:00
Joachim Wiberg 0506b0f364 .github: attempt to fix sync job [skip ci]
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-25 14:57:28 +02:00
Joachim Wiberg 590066f454 doc/cli: add missing command [skip ci]
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-25 13:53:59 +02:00
Richard AlpeandJoachim Wiberg 484b12611b cli: use infix interfaces types in cli-pretty
Don't use iana-if-type, use infix-if-type.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-25 12:38:33 +02:00
Joachim Wiberg 6bba38bb1c statd: add support for ietf-interfaces/interface/admin-status
Xlate IFF_UP flag to admin-status: up/down.  We do not support any
'testing' mode (yet) in Infix.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-25 10:49:57 +02:00
Jon-Olov VatnandJoachim Wiberg 4cb9f66e0f Doc: Updating IP address assignment examples
Improved "show interfaces" information is now
reflected in IP address examples
- source info added
- IPv6 addresses shown

Also added an example with IPv6 privacy for stateless autoconfig
2023-09-25 08:31:26 +02:00
Joachim Wiberg 2431089e50 Merge branch 'jovatn-jonva/user-guide'
Manually merge PR #137, with minor updates to the YANG deviations, and
complete relocation of the new user-guide.  The idea is to keep all the
documentation generic and use the docgen package later to include all
relevant parts into a PDF user guide.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-22 07:19:12 +02:00
Joachim Wiberg febf6c632d confd: simplify not-supported
- drop origin since targeted at v23.09
 - drop ipv6 temporary address deviations, fixed in #139

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-22 07:18:48 +02:00
Joachim Wiberg 999d83ba8b confd: /if:interfaces-state is deprecated in IETF
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-22 07:18:48 +02:00
Joachim Wiberg 5d664fa055 doc: relocate images to img/
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-22 07:18:48 +02:00
Joachim Wiberg d014bc4b91 doc: expand on data plane setup
- expand on data plane setup
 - adjust headings
 - replace infix-00-00-00 with exmaple

[skip ci]

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-22 07:18:48 +02:00
Joachim Wiberg 76341750c0 doc: relocate user-guide/* to .
Like the Developer's Guide the User's Guide should be a single file on
top-level (at least for now), where it references certain sections in
other files.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-22 07:18:48 +02:00
Jon-Olov VatnandJoachim Wiberg 7c69926211 Adding draft doc on IP address configuration (user guide)
Adding it in a dedicted directory for the user guide.
Can be changed, of course.
2023-09-22 07:18:48 +02:00
Jon-Olov VatnandJoachim Wiberg 1bf1f06a21 Updating infix-ip to clarify non-support deviations of ietf-ip
Setting deviations of non-supported parts of ietf-ip

Idea is that "pyang -f tree ietf-ip.yang infix-ip.yang" should
show what we really support (and should make tests for).
2023-09-22 07:18:48 +02:00
Joachim Wiberg 525716e88e Revert ".github: fix sync action pat naming"
This reverts commit ce95488420.
2023-09-21 19:47:56 +02:00
Joachim Wiberg 1b272e994b doc: relocate .svg to doc/img/ and mention loopback in overview
[skip ci]

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-21 16:53:35 +02:00
Joachim Wiberg 933330cd87 doc: update svg
[skip actions]

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-21 16:53:35 +02:00
Joachim Wiberg 1197b9de5c doc: proposal for how to document netoworking use-cases/capabilities
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-21 16:53:35 +02:00
Joachim Wiberg b0d36ca51d confd: recreate interfaces which do not have permaddr
Only physical interfaces have a permanent link address.  So in order to
restore the default MAC generated by the kernel for interfaces such as
bridges, veth pairs, VLAN interfaces, and link aggregates, we recreate
them.

This patch adds support for checking if the phys-address attribute has
been deleted from bridge, vlan, and veth interfaces.

The netdag_must_del() function has been refactorored slightly so each
interface type is responsible for returning true if its condiitions are
satisfied.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-21 16:34:48 +02:00
Joachim Wiberg 9a8251ec66 confd: use 'ip link' instead of ethtool to query permaddr
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-21 16:34:48 +02:00
Joachim Wiberg 2f045c73de confd: only warn missing outer-tag if missing from cif
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-21 16:34:48 +02:00
Joachim Wiberg 34a89c4909 confd: drop developer debug messages
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-21 16:34:48 +02:00
Joachim Wiberg f7e877ebcc test/case: add new test to suite
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-21 16:34:48 +02:00
Joachim Wiberg e528fe0e34 test/case: new test, verify custom mac address
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-21 16:34:48 +02:00
Joachim Wiberg d3ac2942bb test/infamy: refactor and add iface.get_phys_address()
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-21 16:34:48 +02:00
Joachim Wiberg 826ea9d2a9 test/infamy: add missing <get-data> RPC to netconf-client
The netconf-client Python lib currently does not support the <get-data>
RPC.  This commit adds a local extension to the Device class which can
be upstreamed at a later time.

Also some added comments and disabling of pylint warnings.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-21 16:34:48 +02:00
Joachim Wiberg 15bc21c56b test/infamy: minor refactor and whitespace
- prefix local members with _
 - pylint whitespace
 - pylint unnecessary parens

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-21 16:34:48 +02:00
Joachim Wiberg d0bb51e433 confd: add support for setting phy-address on interfaces
- Override read-only flag in YANG model
 - Add support for setting custom MAC
 - Add support for restoring permanent/original MAC

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-21 16:34:48 +02:00
Joachim WibergandTobias Waldekranz d5f9f1a73e confd: fix IPv6 autoconf support
- Enable privacy feature, allows true random address instead of EUI64
 - Allow global addresses to use router prefix

Fixes #136

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-21 09:05:49 +02:00
Richard AlpeandJoachim Wiberg f2267b98b9 avahi: set proto random for ipv4 Link-Local address
Set the IP origin "random" for avahi IPv4LL addresses. The reason we
use random and not link-layer for link-local IPv4 addresses is the
fact that they are not based on link-layer info, such as IPv6 eui64
generated LL addresses.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-20 11:33:35 +02:00
Richard AlpeandJoachim Wiberg 32511c2b2b avahi: add pristine copy of avahi-autoipd.action
Add a pristine copy of the current version of avahi-autoipd.action.
This script will be modified by us in later commits.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-20 11:33:35 +02:00
Richard AlpeandJoachim Wiberg d00c062c0e cli: print ip origin in detailed interfaces view
Include ip origin when doing "show interfaces name NAME". Both IPv4
and IPv6.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-20 11:33:35 +02:00
Richard AlpeandJoachim Wiberg 411fa38c50 cli: pretty print ipv6 addresses in show interfaces
Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-20 11:33:35 +02:00
Richard AlpeandJoachim Wiberg 4cfe0fa945 test: add ipv6 to bloated.json for cli-pretty
Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-20 11:33:35 +02:00
Richard AlpeandJoachim Wiberg cf0c99bd78 statd: add ipv6 data to operational datastore
Modify existing IPv4 code to also add IPv6 address data to the
operational datastore. Also add support for handling link-layer IPv6
address.

IPv6 LL addresses generated with eui64 has "link-layer" origin
and random/secure generated LL addresses has "random" origin.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-20 11:33:35 +02:00