Compare commits

...
285 Commits
Author SHA1 Message Date
Joachim Wiberg a91f8d0e3f Update ChangeLog for v23.09 development release
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
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
Richard AlpeandJoachim Wiberg b05d220fa4 statd: break out existing ipv4 code (cosmetic)
A preparation patch for ipv6 support. There's no functional change.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-20 11:33:35 +02:00
Richard AlpeandJoachim Wiberg f69b08ea59 test: add top level unit test suite
This currently includes cli-pretty tests. It could be executed
separately to clarify test results in github actions. This commit
includes it in the main test execution. The most important thing is
that it's executed.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-19 11:57:08 +02:00
Richard AlpeandJoachim Wiberg ebdbc1e7ad test: use sh shell in cli pretty test runner (POSIX)
Bash is apparently missing in the Alpine Docker.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-19 11:57:08 +02:00
Richard AlpeandJoachim Wiberg 2830080c0f .github: checkout submodules in regression.yml
It doesn't look like the regression suites updates the 9pm submodule,
in this commit we attempt to fix this.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-19 11:57:08 +02:00
Richard AlpeandJoachim Wiberg ed2060c2a2 Bump 9pm submodule
> 9pm: print git sha sum in banner
> 9pm: add graceful check for missing suites and tests
> ssh: Spell out the full name of node properties
> ssh: Remove username from debug messages
> Merge pull request #48 from neg/execute-cleanup

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-19 11:57:08 +02:00
Richard AlpeandJoachim Wiberg 12d4760156 test: add ip addr origin to bloated.json unit test
Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-19 11:56:14 +02:00
Richard AlpeandJoachim Wiberg b4ad2fb3c4 confd: add ip proto when setting static ip
There might be more places in confd where this is needed. This works
for the most basic use case.

The proto set here is picked up by statd and converted into a YANG
origin, which is exposed to the user.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-19 11:56:14 +02:00
Richard AlpeandJoachim Wiberg 59c02bd7f3 udhcpc: flush dhcp addresses in default.script
Flush addresses during shutdown and renewal with new address.
This is kind of a hack and needs further testing.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-19 11:56:14 +02:00
Richard AlpeandJoachim Wiberg f75053c931 udhcpc: convert default.script to use ip not ifconfig
This fixes one bug in Infix, namely that dhcp removes all other
statically configured addresses. However it introduces a new one
where dhcp renewals with new ip addresses are added as "duplicates",
we fix this in a later commit in this patchset.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-19 11:56:14 +02:00
Richard AlpeandJoachim Wiberg 7f89abe1af udhcpc: add pristine copy of default.script
Add a pristine version of default.script to our local board override.
The reason for this commit is to track changes we do to it.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-19 11:56:14 +02:00
Richard AlpeandJoachim Wiberg e3a2895531 cli-pretty: print ip address origin (ip route proto)
Print the origin which is based on info from ip route proto.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-19 11:56:14 +02:00
Richard AlpeandJoachim Wiberg 6e9ba0fce5 cli-pretty: use self variables for ipv4 address
Cosmetic code cleanup.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-19 11:56:14 +02:00
Richard AlpeandJoachim Wiberg 669379818e statd: add operational ip addr origin (proto) data
Add protocol from ip route (kernel) as origin in YANG model.

Note, we control the names static and dhcp in the file rt_addrprotos.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-19 11:56:14 +02:00
Richard AlpeandJoachim Wiberg 478a15bc90 statd: break out ipv4 address creation (cosmetic)
This commit is purely cosmetic.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-19 11:56:14 +02:00
Richard AlpeandJoachim Wiberg 2c25a1f343 iproute2: add rt_addrprotos file
This file is read by iproute2 and creates valid names for ip proto.

Such as "static" in:
ip addr add dev e0 192.168.1.1/24 proto static

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-19 11:56:14 +02:00
Richard AlpeandJoachim Wiberg d61762dc7a iproute2: add upstream patch for ip protocol
Add a pristine upstream patch which includes protocol info in ip the
ip command.

More info:
https://git.kernel.org/pub/scm/network/iproute2/iproute2-next.git/commit/?id=bdb8d85
2023-09-19 11:56:14 +02:00
Richard AlpeandJoachim Wiberg 8fc709676f Bump 9pm submodule
> 9pm: add new result markdown file
> Use unique log dir for each 9pm execution
> 9pm: parse 9pm.rc file in harness
> Add new 9pm.py harness examples
> 9pm: add space between timestamp and output
> Move tcl library code to lib_tcl subdirectory
> 9pm: fix TAP skip result when not last in test
> unit_test: allow tap.yaml to be executed from cmdline
> Merge pull request #49 from kernelkit/master

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-12 11:07:01 +02:00
Richard AlpeandJoachim Wiberg ea4a187a1a cli: don't set empty to none in show iface pretty
This allows us to show empty values easier, while not affecting the
if statements.

This allows for a greater flexibility in which values are shown and
not. For example, we want to show empty columns for data that the
user adds/removes, such as IP addresses.

...
ipv4 addresses      :
...

However, we don't want to show empty columns for information that
should never exist for a particular interface type.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-12 08:33:14 +02:00
Richard AlpeandJoachim Wiberg 3000597fbc cli: add statistics to detailed show interface view
Print in and out octets for each interface that has the information
in the operational data store.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-12 08:33:14 +02:00
Richard AlpeandJoachim Wiberg 7b1974c85f cli: print ipv4-address key even if no ip is set
Should make reading easer and make it more obvious if an interface
doesn't have an IP set.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-12 08:33:14 +02:00
Joachim Wiberg c421e14e6c doc: replace 'exec' with '/', CLI fixed as of v23.08
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-10 11:01:23 +02:00
Joachim Wiberg 9f573f6c6f Add CLI example fold-out
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-09 17:59:20 +02:00
Joachim Wiberg c9e84bffd8 Minor spellcheck and update of footnote
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-09 17:53:33 +02:00
Richard AlpeandJoachim Wiberg 3c2b901439 aarch64: add python3 on target (defconfig)
Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-06 16:11:59 +02:00
Richard AlpeandJoachim Wiberg 9e48fb09f6 cli: rewrite interface pretty printer in phyton3
The old version (bash) where slow and cluttered. This version is much
faster and easier to read / maintain.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-06 16:11:59 +02:00
Richard AlpeandJoachim Wiberg 1ea658ad1d test: add new cli-pretty unit test
This test is a "unit" test, which implies that it can be executed
locally without access to a Infix target environment.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-06 16:11:59 +02:00
Richard AlpeandJoachim Wiberg 7b0bd77d16 x86_64: add python3 on target (defconfig)
Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-06 16:11:59 +02:00
Richard AlpeandJoachim Wiberg 5ac24eb29e statd: add parent-interface to operational data
Add ietf-if-extensions:parent-interface which is synonymous with link
in ip-route.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-06 16:11:59 +02:00
Richard AlpeandJoachim Wiberg 48120c9144 statd: add interface bridge to operational datastore
Add bridge master into "infix-interfaces:bridge-port" -> "bridge".

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-09-06 16:11:59 +02:00
Joachim Wiberg ce95488420 .github: fix sync action pat naming
GITHUB_ prefix is reserved.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-05 07:40:17 +02:00
Joachim Wiberg 2bcf0d1f57 doc: add Development section and expand on initial requirements
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-01 16:13:47 +02:00
Joachim Wiberg 2d608f44b1 doc: fix markdown link to Buildroot manual
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-01 16:13:27 +02:00
Joachim Wiberg 94d93260a8 doc: add symlink for default README -> variant.md
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-31 18:02:20 +02:00
Joachim Wiberg c592818587 .github: fix missing release notes from release
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-31 17:57:00 +02:00
Joachim Wiberg 8b4f10c21d doc: update ChangeLog for v23.08 release
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-31 13:23:15 +02:00
Joachim Wiberg 76fe75469d libsrx: fix include, core.h replaced by common.h outside confd
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-31 10:47:08 +02:00
Tobias WaldekranzandJoachim Wiberg a88391afa2 common: nameif: Drop the assumption that any eN interface is a port
The port marker is intended to be used as a hint to the
auto-factory-config generator, so that it can create a bridge for all
switch ports by default. Therefore, revert to only include ports that
devlink reports as "flavour physical".

If we want to test this functionality in QEMU, we can use Rocker, the
virtual switch, instead.
2023-08-30 12:45:51 +02:00
Tobias WaldekranzandJoachim Wiberg 93118b02fe confd: Make physical port detection compatible with Linux 6.1
The old assumption was that only virtual links would have specific
"linkinfo" data. However, somewhere between 5.19 and 6.1, DSA ports
gained the ability to report its "conduit" interface via the
"linkinfo" attribute. That's great, but unfortunately it broke our
heuristic assumptions.

The new assumption is that only physical ports will report a
"parentbus" attribute. Let's see how long that will last :)
2023-08-30 12:45:51 +02:00
Tobias WaldekranzandJoachim Wiberg 4a4733354b kernel: Use Buildroot's default kernel (6.1.y)
Our custom version has gone from being newer than Buildroot's default
to being older, so there is no reason for us override it anymore.

The kernel has become a bit more picky and will give nasty error
messages if a link's PHY connection is not explicitly defined, but
instead relies on implicit defaults. This was missing from the CPU
port of the CRB, so we supply a small patch to fix that.
2023-08-30 12:45:51 +02:00
Joachim WibergandTobias Waldekranz 04e8a87287 package: set foo_REDISTRIBUTE = NO for local packages
When running `make legal-info` Buildroot will collect source and
licenses for all packages, which generates a few warnings for our
local packages.  Local packages are skipped.

> The source code for packages that set <PKG>_REDISTRIBUTE = NO will not
> be saved.  Patches that were applied are also saved, along with a file
> named series that lists the patches in the order they were applied.

Hence, setting 'foo_REDISTRIBUTE = NO' disables the warning, which seems
like a good idea to reduce the number of unnecessary questions we might
otherwise get.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 12:44:57 +02:00
Joachim WibergandTobias Waldekranz ab88c97d45 package/statd: properly declare license and group decls.
Correct license for package is the same as confd and libsrx.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 12:44:57 +02:00
Joachim WibergandTobias Waldekranz 1baeaeddf5 src/statd: licensed under the same license as confd & libsrx
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 12:44:57 +02:00
Joachim WibergandTobias Waldekranz b6baf452bd package/confd: properly declare license and group decls.
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 12:44:57 +02:00
Joachim WibergandTobias Waldekranz e3d9236927 test: disable flaky services_basic test
See issue #126 for details.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 8ce3785d26 test/case: increase test time slightly to catch per-20 sec LLDP
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz c07d3e7ec9 Relocate confd-bootstrap.sh to /usr/libexec
Bootstrap and daemon-specific helper scripts, sometimes known as foot
guns, should not be in $PATH.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 31abe00514 test/case: add LLDP to same test
This unfortunately required some restructuring, and as well as extending
the run time since we have no way of sending Ethernet frames currently
in the test framework (socat would be nice).

 - Put enable/disable of services before tcpdump start, LLDP lingers ...
 - Extend run time: 3 -> 20 sec to catch periodic LLDP messages

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 943603b636 test/case: check for both SSDP and mDNS in same test
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 3dd5810b59 test/case: new test, verify SSDP can be disabled/enabled
This test use NETCONF to enable/disable SSDP, it then verifies that the
DUT responds to, or does not respond to, SSDP discover messages.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 9075e93524 test: add SsdpClient helper class to probe for end devices
This first version reliles on netcat (nc), mostly because that's what I
could figure out how to run in a netns.  A better way would be to have a
full SsdpClient that can collect query responses properly and log all
devices found.

This, however, will do fine for verifying SSDP on/off functionality.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 9a5c619571 test: add Sniffer helper class, wrapping tcpdump
Monday fixup, audit with @wkz

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 1ff744fd04 test: minor, syntax pep-8
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 27387e5e27 package/skeleton-init-finit: rename SSDP service .conf
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz b31e2e9a74 package/skeleton-init-finit: let SSDP advertise every 30 sec, like LLDP
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz efccd7fbda Enable LLDP agent in factory-config
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 50a550b83f confd: add support for enabling LLDP agent using ieee802-dot1ab-lldp
This patch adds support for enabling LLDP using the std IEEE 802.1ab
LLDP yang model.  An infix-lldp model is as well to reduce the set of
available parameters to a bare minimum (enabled), for now.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz f6cfdfd467 cli: add "end" alias to "up", leave this node/subsection
I'm sorry, I'm just so used to this modus from the previous company.
The difference to 'exit', which is available on Cisco IOS, is that it
on the top-level config context does not exit/abort to admin-exec but
instead stops.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 44987d7045 Fix 120: rename sysrepo-bootstrap -> confd-bootstrap
The script resides with confd and sets up our system for confd, this
should make it easier to rememeber where it's located.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 757428364b patches/tcpdump: add missing drop-verbose-default-output patch
Lost in the big summer merge of 2023

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 445cf92009 patches/netcalc: add missing pipe colorization patch
Lost in the big summer merge of 2023

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz bbf9560d73 Ignore /.backup and /x-* directories
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 9e1e90e87b Enable mDNS/SD and SSDP discovery services in factory-config
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz dba737b975 confd: add support for enabling mDNS/SD and SSDP discovery services
Also, for usability, add `name:<SVC>` to each service declaration so they
can be located more easily and/or enabled/disabled using the service they
provide.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 295cc11a8d confd: flatten hierarchy now that statd has moved out
Fix #115

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz ac011e459b src: minor, add missing dist_doc_DATA incl. LICENSE file
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz a38e5582ac Refactor, break out a libsrx from confd, shared with statd
Everything (!) potentially shared with other sysrepo plugins/daemons and
helper functions (not yet in libite) that can be used by other daemons
have been relocated to libsrx.

Fix #116

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Joachim WibergandTobias Waldekranz 72c8aaef0c package/skeleton-init-finit: enable fewer services by default
This patch drops auto-enable of services we want to be able to control
via NETCONF/YANG.  SSDP and mDNS/SD enable/disable configure support,
using native models, will be included in the same PR and LLDP+SNMP may
come later, using std. IEEE/IETF models, they are not critical atm.

Fix #118

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-30 10:37:43 +02:00
Tobias WaldekranzandJoachim Wiberg 2d6c872937 netconf: Ignore internal ifaces (e.g. DSA ports) in factory-config
On some system, certain interfaces are not usable by an end-user. The
canonical example of this is the ethernet MAC connected to a switch,
i.e. the DSA port.

Avoid having these be picked up in the generated factory-config, which
would be confusing to a user, by classifying them as "internal" ports
to be ignored by confd and friends.
2023-08-25 10:51:45 +02:00
Tobias WaldekranzandJoachim Wiberg 319a1bb46b cn9130-crb: Add a workaround for the MMC timeout issue in U-Boot
For some reason, the controller disables the bus power sometime after
it was enabled by the driver. The reference manual says, in Table 645,
about the SD_BUS_POWER bit:

> ... It will be cleared if one of the following occurs: the
> sd_bus_vlt and the voltage support in the Capabilities Register 1 do
> not match or if a card removal state was detected.

Further investigation will be needed to find the (electrical?)
root-cause of this issue.
2023-08-25 10:51:45 +02:00
Tobias WaldekranzandJoachim Wiberg 02ac90b35f cn9130-crb: Upgrade U-Boot to 2023.07.02 2023-08-25 10:51:45 +02:00
Tobias WaldekranzandJoachim Wiberg 06ea1dd80b uboot: Fix inconsistency in naming of the netboot mode
This is referred to "net" in all places except for this script.
2023-08-25 10:51:45 +02:00
Tobias WaldekranzandJoachim Wiberg 246b06b8d5 uboot: When booting from a block device, wait for it to show up
The kernel's mounting of the rootfs may race against the underlying
device being probed - especially for media like MMC cards and USB
sticks.

Therefore, tell the kernel to wait for the root device to show up.
2023-08-25 10:51:45 +02:00
Tobias WaldekranzandJoachim Wiberg 73f991081c post-image: Allow disk images to be built from downloaded release
This is useful when we're only building a bootloader, but we still
want to create a full disk image on the format expected by Infix.
2023-08-25 10:51:45 +02:00
Tobias WaldekranzandJoachim Wiberg c08fe9f522 post-image: Defer RAUC status file generation to disk image creation
In the future we want to build disk images from builds where we
haven't locally built Infix, we've just downloaded an existing
release. In those cases we also have to create rauc.status, even
though we're not creating a bundle.
2023-08-25 10:51:45 +02:00
Tobias WaldekranzandJoachim Wiberg cf05d46548 aarch64: Keep dtb directory structure from kernel tree in /boot
This is the layout expected by the "distro boot" effort in U-Boot.

As far as I understand, the contract is:

- U-Boot built for `fooboard` by `vendor`, will set the `fdtfile`
  variable to `vendor/fooboard.dtb` - or more precisely: matching
  whatever path the dtb is built at in the kernel tree.

- A distro (e.g. Infix) then just needs to specify the `fdtdir` in its
  syslinux config (/boot in our case), and U-Boot will be able to find
  the correct dtb.
2023-08-25 10:51:45 +02:00
Tobias WaldekranzandJoachim Wiberg 308a620b69 common: Improve "traditional FIT" image generation
Make the traditional FITs smaller by:

- Filtering out the kernel image from the rootfs, since the FIT way is
  to ship it separately.

- Gzipping the kernel in the FIT, since aarch64 uses the uncompressed
  "Image" format, and squashfs won't take care of it for us.
2023-08-25 10:51:45 +02:00
Richard AlpeandTobias Waldekranz c6513a37bb cli: add source to show interface (ietf type)
Add source, such as "ethernet" to the show ietf interfaces command.
This is translated from the somewhat obscure ietf type, such as
iana-if-type:ethernetCsmacd => ethernet

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-08-23 14:45:38 +02:00
Richard AlpeandTobias Waldekranz 1112203eb3 cli: merge ipv4 and mac in show interface output
Print both ip and mac in the PROTOCOL/ADDRESS column.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-08-23 14:45:38 +02:00
Richard AlpeandTobias Waldekranz fdf027d282 cli: change header design in show interfaces
Signed-off-by: Richard Alpe <richard@bit42.se>
2023-08-23 14:45:38 +02:00
Richard AlpeandTobias Waldekranz 035397e87f cli: add color to state in show interfaces
Signed-off-by: Richard Alpe <richard@bit42.se>
2023-08-23 14:45:38 +02:00
Richard AlpeandTobias Waldekranz 03f99d7252 cli: autocomplete interface names in show interfaces
And quote the "$name" variable.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-08-23 14:45:38 +02:00
Richard AlpeandTobias Waldekranz 62f0958b65 cli: replace show interfaces with new pretty printer
Replace the old "ip" output with data from the sysrepo operational
datastore. This data is piped through the new json-cfg-pretty script,
which formats the data in a nice human readable way.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-08-23 14:45:38 +02:00
Richard AlpeandTobias Waldekranz 2656f17f58 statd: add operational ipv4 address data
Add IPv4 address info from "ip addr" json to sysrepo operational
datastore.

This patch adds: MTU and ip with prefix-length.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-08-23 14:45:38 +02:00
Jon-Olov VatnandJoachim Wiberg d34908a0e5 Fixing broken urls in document docs 2023-08-22 13:41:09 +02:00
Joachim WibergandTobias Waldekranz 3f3de71a38 Fix #107: auto-sync forks every day 2:42 UTC or on dispatch
Highly experimental.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-22 13:33:19 +02:00
Joachim WibergandTobias Waldekranz fcb629f08f test: update cases to use new infix-if-types
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-22 13:32:47 +02:00
Joachim WibergandTobias Waldekranz 3a56cbe1d4 confd: minor janitoring, yang linting
The commit adds a missing description and reorders some yang statements
to meet canonical ordering according to RFC7950, section 14.

It also relocates the /interfaces/interfaces/infix-if:port augment to
its own base model that the bridge (and later lag) models reference.
Solving the bisarre ordering issues we've seen previously.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-22 13:32:47 +02:00
Joachim WibergandTobias Waldekranz 34fd50d1b8 confd: add deviation for if:type limiting it to supported types
This patch adds a new infix-interface-type, derived from the IANA base
type, allowing us to limit the list of supported native interface types.

Basing on IANA interface type ensure compatibility with other models,
e.g., standard/ieee/published/802.3/ieee802-ethernet-interface.yang,
which attaches itself to all interfaces of type ianaift:ethernetCsmacd.

Tested with yanglint and in Infix using ieee802-ethernet-interface.yang,
the 'ethernet' container was properly attached to interfaces of type
infixift:ethernet.

Tab completion in the CLI now lists only the supported types.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-22 13:32:47 +02:00
Joachim WibergandTobias Waldekranz 43dd052707 confd: in case of error from aug_save(), log error strings
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-22 13:32:47 +02:00
Joachim WibergandTobias Waldekranz 782d63e910 board/netconf: fix regex that adds /bin/clish to /etc/shells
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-22 13:32:47 +02:00
Joachim WibergandTobias Waldekranz 96a2418d19 confd: set fallback shell to /bin/false
This further locks down confd to fall back to /bin/false as login shell
in case of internal errors.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-22 13:32:47 +02:00
Joachim WibergandTobias Waldekranz 1e74f17a66 Fix #95: lock down and restrict /system/authentication/user/shell
This patch restricts the possible user shells to a subset of the list in
/etc/shells, which is generated by Buildroot.  The default is 'false' to
prevent accidental shell access for non-admin role users.

The default shell for the admin user is now /bin/clish, which can be
further locked down before Infix v24.02 LTS.

In case of internal error the default fallback shell is now set to the
customizable LOGIN_SHELL, which currently is /bin/bash.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-22 13:32:47 +02:00
Joachim WibergandTobias Waldekranz 7307439bf6 confd: drop old versions of internal yang models
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-22 13:32:47 +02:00
Joachim WibergandTobias Waldekranz 2d614d4fe1 confd: merge internal yang revisions when inside release cycle
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-22 13:32:47 +02:00
Joachim WibergandTobias Waldekranz 5f63a4d671 confd: fix lost deviations and timezone enumerations lost in merge
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-22 13:32:47 +02:00
Joachim WibergandTobias Waldekranz bc048f6313 Drop Hybrid Mode from default builds, update documentation
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-22 10:38:02 +02:00
Ahmed KaricandJoachim Wiberg 2c4b67cbbc test/case: add basic routing test 2023-08-18 14:26:58 +02:00
Joachim WibergandTobias Waldekranz 920a4481b1 .github: simplify contribution guidelines slightly
Also, the file MAINTAINERS has been removed previously.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-17 08:28:33 +02:00
Joachim WibergandTobias Waldekranz 64a6df7b71 .github: add support resource/contact for when reporting issues
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-17 08:28:33 +02:00
Joachim WibergandTobias Waldekranz cad6530949 Drop unused script, PROFINET moved to separate repo
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-17 08:28:33 +02:00
Joachim WibergandTobias Waldekranz b1720f7f77 Relocate from top level
No need to clutter up the root directory of the project.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-17 08:28:33 +02:00
Joachim WibergandTobias Waldekranz 58525325b9 Slight redisposition of content
The following changes have been made to condense and simplify the
leading text in the README.  Tested with Grip to verify that the first
paragraph flows nicely to the left to the fine new logo.  This allows
us to use the space more efficiently and the reader does not have to
scroll so long before reaching relevant content.

 - Right-align logo, and shrink it a bit, to fit text to the left
 - Move topic links to a foldout at the top
 - Move boring licensing stuff to separate docment

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-17 08:28:33 +02:00
Tobias Waldekranz 8b8090bd31 doc: Add new Logo (again)
Go for something simple - Tux trapped in an RJ45 jack.

Also, remove the old versions that we don't use any more. They're in
the log if we ever need them.
2023-08-16 13:52:04 +02:00
Joachim WibergandTobias Waldekranz 1dc1a02f0c doc: add syntax highlighting for dot segments
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-16 13:52:04 +02:00
Joachim WibergandTobias Waldekranz 361ba05d8e doc: drop unused documents
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-16 13:52:04 +02:00
Joachim WibergandTobias Waldekranz b480cd76f1 Fix #64: initial Developer's Guide
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-16 13:52:04 +02:00
Joachim WibergandTobias Waldekranz 93db790de6 Untabify
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-16 13:52:04 +02:00
Joachim WibergandTobias Waldekranz d2ccb32871 New logo and split of README in multiple pages
This is a cleanup and reorganization of the Infix documentation.
Starting with a simplification of the top-level README, splitting
it up into several pages.

Also, fixes #100 by updating the documentation on Qemu.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-16 13:52:04 +02:00
Ahmed KaricandTobias Waldekranz 7432ff10aa test/case: add bridge forwarding tests (single-DUT, dual-DUT, VLAN separation) 2023-08-16 13:51:00 +02:00
Ahmed KaricandTobias Waldekranz fc7d212696 test/infamy: add edge type to logical topology (mgmt port selection) 2023-08-16 13:51:00 +02:00
Richard AlpeandJoachim Wiberg 769338515a klish-plugin-infix: fix indentation in infix.xml
Prior to this patch the indentation was a mix of tabs and spaces.
Now use 2 spaces as indentation.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-08-14 16:49:30 +02:00
Joachim WibergandTobias Waldekranz c94733f6bd package/klish: add missing faux dependency
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-14 13:00:09 +02:00
Joachim WibergandTobias Waldekranz 83e5af33ff Fix #86: rename klinfix -> klish-plugin-infix
Also renames all klix_SYM@klinfix to SYM@infix, this is fine since we're
always calling these symbols with @infix.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-14 13:00:09 +02:00
Tobias WaldekranzandJoachim Wiberg f660f6e9c7 qemu: Homogenize network setup
- Always respect the requested model to emulate. Before this change, a
  device configured to run in TAP mode would ignore a user's requested
  model and always emulate a e1000.

  This worked on x86_64 where that driver is part of the kernel, but
  that is not true for aarch64.

- Always supply a mactab. It was very confusing that the interface
  names would change, in Infix, depending on the selected networking
  mode.

- Remove old decoy variables that were assigned but never used
  anywhere.

- Separately setup the host and target side of a nic (i.e. use a
  -netdev/-device pair instead of the -nic shortcut). This lets us
  share the host side setup across all modes.
2023-08-09 19:45:32 +02:00
Tobias WaldekranzandJoachim Wiberg 9e5904936a statd: Add missing dependencies to Config.in 2023-08-09 19:45:32 +02:00
Joachim WibergandTobias Waldekranz 15795c4b41 confd: skip lldpd and avahi hostname reload during bootstrap
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 17ff8677ee board/common: replace default editor, nano -> mg
This reverts an earlier change where nano was made the default editor in
a misguided attemt by yours truly to accomodate beginner users.

With the recent improvements of the CLI and the fact that the NETCONF
support has matured greatly, the need for a user-friendly editor have
diminished drastically.  Editing system files is now limited to devs
and the core team prefers Mg over nano and vi.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 9766bbbed5 doc/cli: update all the topics to match the refreshed CLI functions
Also, add a new `quick.md` that pops up when the user types `help`.
Very quick intro to get started.  Useful when we add a factory-default
motd: "Welcome to the CLI, type 'help' for a quick overview."

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz bfce877525 confd: ensure change_hostname() returns a sysrepo error code
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz d5298d10e8 klinfix: misc. fixes
- Sync sysrepo conf settings, lots of new settings added, one removed
 - Check if help topic exists
 - password encrypt arguments should be optional, add SWITCH
 - show datetime argument should also be optional, add SWITCH
 - Trial, output factory- and startup-config colorized
 - Switch to srp_prompt v2 for configure context

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 0c6d82cf2f package/klish-plugin-sysrepo: bump to latest + new kkit srp_prompt
The upstream help system has improved greatly.  We can now rely more on
it for generating the man-page like help texts for leaf nodes.  There
is also a new srp_prompt symbol that overrides the default klish one,
srp_prompt adds a '%x' format specifier for an inline path instead of
the default [edit foo bar] JunOS style two-liner.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 8d79235436 package/klish: bump to kkit-next, based on latest upstream
Lots of changes upstream for parsing help texts, running as different
user, etc.  Was getting too difficult to backport to tags/3.0.0, so this
resets the clock on top of (almost) the latest.  Experienced issues with
the admin user in configure mode on the latest commits (e4f65d5).

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz fdb2a5a6dc package/faux: bump to latest upstream git hash
This is needed for the bleeding edge klish + klish-plugin-sysrepo, which
the next couple of commits will add.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz e57616fe3a confd: improve DHCPv4 YANG model descriptions
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 987ec779d3 klinfix: add new commands uptime, version, and netcalc
Preparing for a "show system-information" as well, which still needs to
be discussed to determine contents.  Some data also still missing, e.g.,
article/serial/product number db.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 883d59709e klinfix: add new commands ping and tcpdump, w/ interface completion
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 10684d200f board/common: use tempfile for sysctl manip and remove when done
Mainly just cleaning up /tmp from stale files.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 032881fbf8 board/netconf: chmod 444 (read-only) generated factory-config
Prevent tampering and unintentional overwrite by users.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz b95a82207d package/klish: switch to kkit branch @kernelkit, new features
This commit switches the klish package to use the kkit branch instead of
keeping a lot of patches from the v3.0.0 release.

Most of the changes made are for dragging tinyrl into the 21st century.
It now supports most of the basic features one have come to expect from
a readline replacement: line navigation, deleting words, erasing entire
line, kill and yank of lines/words and last argument on previous line.

The history has also gotten a bit of a stern talking to.  It no longer
deletes lines matching existing old ones from the history, instead it
just checks if the previous command is repeated.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 07b057c455 board/common: import bash completion for initctl
From upstream Finit@b682a5e

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 1a2d799f82 board: drop disabling of built-in help for bash on NETCONF builds
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz d4b23eac75 klish: klish-plugin-sysrepo: klinfix: bump for new srp_prompt@sysrepo
This commit changes the JunOS look of the CLI to something more akin to
a standard shell.  To achieve this a %w format specifier to display the
path components is added to both klish and klish-plugin-sysrepo.

Before:
	admin@infix-12-34-56:exec> configure
	[edit]
	admin@infix-12-34-56:configure> ediit interfaces interface eth0
	[edit interfaces interface eth0]
	admin@infix-12-34-56:configure> leave
	admin@infix-12-34-56:exec>

After:
	admin@infix-12-34-56:/> configure
	admin@infix-12-34-56:/config/> edit interfaces interface eth0
	admin@infix-12-34-56:/config/interfaces/interface/eth0/> leave
	admin@infix-12-34-56:/> leave

However, due to unforseen problems with the naming of VIEWs in klish,
the admin-exec level "path" is hard-coded to "/" for now.

Future imporovement: fold in calling prompt@klish from srp_prompt, and
figure out why the "main" VIEW cannot be changed to "exec" without klish
just bailing out starting up.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 63779cfe37 configs: change default TERM from linux to xterm
Turns out one of the reasons some keys did not work as they should in
certain commnands, most notably the Home/End in 'less', was due to the
default TERM variable being set to 'linux'.  Changing to 'xterm' fixes
this issue, works with both console and ssh login, and from testing do
not seem to have any adverse effects on existing functionality.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 63aa130e9c klinfix: restore Ctrl-C to abort current line, use Ctrl-D instead
While spending the past couple of weeks actually trying to use the CLI,
I realized that it was very confusing to have a different behavior for
Ctrl-C than I was used to from regular shells (including the old clish
from $OLDJOB).

This change drops the Ctrl-C binding, restoring break/abort behavior,
and lets Ctrl-D be abort/exit.  Pressing Ctrl-D in a sub-context in
configure calls exit, when in the top-most configure context we now
do an abort and return to admin-exec.

To apply the changes the user still has to type 'commit' or 'leave',
or tap Ctrl-Z as in the Cisco CLI.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz d913ce00e6 doc/cli: relocate and extend CLI docs with intro and keybindings
This is not just for online viewing, these markdown documents are also
made available in the CLI itself from admin-exec as:

    help [introduction | keybindings | tutorial]

With this commit we also add lowdown and the real less application to
be the Infix help system.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 52301db8bd package/lowdown: new package, markdown pretty-printer for terminals
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Tobias Waldekranz 0aae72745f package/klish-plugin-sysrepo: bump and switch to KernelKit mirror
This adds support for the srp_help_text() symbol.  It allows us to
display the full description for a leaf in a YANG model.  This has
been added to the 'help [foo]' configure context command.

A separate admin-exec level 'help' command will be added in a later
commit.  It will only be an intro to the CLI, keybindings, etc.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 3a4097c741 package: switch faux and klish to KernelKit mirrors on GitHub
No need to go fishing every time we build when we have everything we
need in the pond next door.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 142f33e89e patches/klish: restore some common keybindings for line manipulation
This restores some of the original keybindings for line manipulation
that was part of the original CLISH.  They had been disabled upstream
during the UTF8 conversion and never got reimplemented.

From branch kkit on https://github.com/kernelkit/klish, the kkit branch
is based off of the 3.0.0 release.  The same patches are also available
on kkit-next, which is based on the latest upstream master.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 30a28fe874 klinfix: modify show datetime, add optional [iso] flag
By default, output human-friendly RFC2822 format rather than NETCONF:ish
ISO-8601 format.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 697a907350 klinfix: new commands show log [FILE] and follow [FILE]
With completion support.  The log command has an optional last arg,
after FILE, tail NUM, which runs tail -n NUM FILE instead of cat.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 24d9a6dfc6 klinfix: add new commands password [generate | encrypt]
An excellent example of how to define commands with optional subcommands
and optional parameters:

  password encrypt [type <md5 | sha256 | sha512>] [salt STRING] [PASSWORD]

The tricks here are two:

  1. mode="switch" in the top-level password command
  2. min="0" in the encrypt subcommands

The first turns the COMMAND element into a SWITCH element (with command
matching), and the second makes a COMMAND optional.  If an optional
command is input by the user, then the enclosed PARAM is mandatory.

Please note, due to limitations in the mkpasswd¹ utility, spaces are not
supported in PASSWORD, i.e., when read from CLI prompt.  However, spaces
are allowed when using the interactive prompt, i.e., when omitting the
PASSWORD from the CLI prompt.

¹) mkpasswd does not look for any leading ' or " in the password arg.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz a5ad52e5eb package/klish: install default type definitions for klish plugin
The documentation for klish mentions the file ptypes.xml, which defines
the ptype /STRING.  So let's use that instead of defining our own types.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz 682384875c klinfix: add new commands show bridge [fdb | mdb | vlans]
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz cd0d12c8c0 klinfix: add new commands show [ip | interfaces] [brief | detailed]
Helper commands for quickly diagnosnig the networking subsystem after
making config changes.  Should over time be replaced with operational
status from sysrepo.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Joachim WibergandTobias Waldekranz de9c255b27 klinfix: add support for libyang
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 16:35:18 +02:00
Richard AlpeandTobias Waldekranz 7e1027488f statd: add interface type to operational data
An iana or infix interface type is derived from "ip link" data.
Such as loopback -> iana-if-type:softwareLoopback.

This patch adds support for the following types:
loopback, ethernetCsmacd, veth, l2vlan and bridge.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-08-08 14:39:50 +02:00
Joachim WibergandTobias Waldekranz 2a37d903b9 board/common: enable CONFIG_FEATURE_CHECK_NAMES for usernames
This commit enables a basic sanity check of usernames in BusyBox that by
default is disabled (!).  The rules enabled by this are:

 - the user or group name should consist only of letters, digits,
   underscores, periods, and dashes¹, and not start with a dash (as
   defined by IEEE Std 1003.1-2001), or periods²

 - for compatibility with Samba machine accounts, $ is supported at the
   end of names

 - max length of user or group name is 256 chars

Changes in this commit also includes a sync with latest BusyBox 1.36,
which adds: tree, tsort, SHA hw acceleration, and a separate script
for udhcpc6.

_____
¹) The documentation actually mentions "and at-signs" as well, but that
   has been explicitly removed from the source code.
²) The documentation does not mention that leading periods are not
   allowed, though this is also explicitly mentioned in the source code.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz fe23781827 package/confd: follow-up to 259239c, drop clean-etc script
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz c100a75abe confd: refactor, reduce code duplication
Factor out a new helper function, change_get_user(), to do the bulk of
the work for the change callbacks.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz e078465d19 confd: add support for specifying login shell for ietf-system users
- Add /bin/clish (symlink) to /etc/shells, as well as the traditional
   /bin/{true,false} for completeness
 - Validate shell string, with fallback to /bin/bash and /bin/sh
 - Step infix-system revision, keeping old model in tree

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz 0585499202 confd: give local callbacks access to the current sysrepo session
Needed when searching for unchanged data, e.g., default values when
creating new users.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz 69fa434b44 confd: call lldpcl and avahi-set-host-name after system bootstrap
Services have not even started up yet, so system() calls will only
unnecessarily delay the boot.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz 4d76da309d confd: minor refactor, dry
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz 3893538e46 cli: add support for editing NACM rules
This patch bumps klish-plugin-sysrepo to get EnableNACM support.  For
this to work as expected for the admin user we also need to change the
permission for the model in sysrepo.

Note: the srp_rollback() symbol has been renamed to srp_reset() upstram.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz 11ba06fddf confd: minor cleanup
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz 528ea61302 confd: set up compat authorized_keys symlink for netopeer2-server
Apparently netopeer2-server expects public keys for users to be in the
canonical place (~/.ssh/authorized_keys).  Infix use a custom location
in /var/run, maintained by the ietf-system plugin, which OpenSSH knows
but netopeer2-server doesn't.

It seems to be possible to add some sort of "pattern" to netopeer2 to
indicate where to look for public keys.  This is added when building it
but Buildroot does not expose this as a setting.  So for now, this seem
to be the least intrusive way of handling it.  The owner is root, so a
malicious user cannot change the link or contents without some other
form of privilege escalation first.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz 94908ed33c confd: remove home directory when removing users
No point in leaving unused home directories lingering on the system,
also a potential security problem.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz 5f27f043d1 confd: create users not locked but with password login disabled
Employ the new 'adduser -d' feature where users can be created with
password login disbled instead of creating them locked by default.

This allows us to create remote users that can only access the device
using public key SSH login, which until this point was not possible.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz 7cb68b3a51 patches/busybox: add support for shadow passwords to login applet
The login applet did not know about shadow passwords, and could thus not
determine if a user accont was locked or passwordless.  This caused it
to return 'login: bad salt' instead of "Login incorrect", which is the
more secure path for handling brute force attempts.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Joachim WibergandTobias Waldekranz 7bc14cf07b patches/busybox: add support for adduser -d
The existing 'adduser -D' command adds a locked user account, similar to
the Debian adduser --disabled-login'.  This patch adds support for the
'adduser -d' command, similar to Debian 'adduser --disabled-password',
meaning login is possible but using methods other than password, e.g.,
SSH keys.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-08 14:36:35 +02:00
Richard AlpeandJoachim Wiberg f727653834 statd: add tx/rx counters to iface operational data
Add tx and rx bytes as YANG out-octets and in-octets.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-08-08 06:30:25 +02:00
Tobias WaldekranzandJoachim Wiberg 5236d81819 confd: infix-system-software: Add descriptions 2023-08-07 16:29:59 +02:00
Tobias WaldekranzandJoachim Wiberg c14d506ab1 confd: infix-system-software: Remove unsupported notification node
This would be nice to have, but it is not prioritized at the moment.

Fixes: 4fb0926 ("confd: Add a sysrepo interface to install RAUC bundles")
2023-08-07 16:29:59 +02:00
Tobias WaldekranzandJoachim Wiberg 5978edce94 confd: Explicitly set operstate to up when bringing interfaces up
This ensures that the operstate is defined for all interface
types. Without supplying this, virtual interfaces (e.g. loopback,
dummies, tunnels) will report an "UNKNOWN" operstate. For ports backed
by physical (or virtualized) hardware, this option has no effect.
2023-08-07 15:50:52 +02:00
Joachim WibergandTobias Waldekranz 1afc2adcfc confd,statd: add support for enabling DEBUG log messages at runtime
- add debug flag to trigger DEBUG() statements
 - DEBUG() macro needs 'path' argument

For statd we can add support for an optional '-d' command line option to
trigger, and SIGUSR1 to toggle, debug mode.  TBD for confd which still
remains to be refactored into the same standalone daemon as statd.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-07 00:28:04 +02:00
Joachim WibergandTobias Waldekranz f40e747fbd statd: drop extra \n, not needed
The idea is to 1) map debug/error macros to syslog(), which does not
need \n, and 2) when stdout logging is used, let the macro add a \n.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-07 00:28:04 +02:00
Joachim WibergandTobias Waldekranz db813bd623 klinfix: add CLI support for set datetime 2023-07-03T16:06:34+02:00
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-06 23:58:59 +02:00
Joachim WibergandTobias Waldekranz 6dafda072a klinfix: add klix_rpc() for poweroff and reboot CLI commands
This change allows us to verify common RPC commands from within the
CLI, starting with the poweroff and reboot commands.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-08-06 23:58:59 +02:00
Richard AlpeandJoachim Wiberg a9317901c3 statd: add support for additional operstates
Add support for yang link state "lower-layer-down" and "not-present".

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-08-02 11:11:19 +02:00
Ahmed KaricandJoachim Wiberg 2ff57f865a test/case: upgrade deprecated hash method 2023-07-13 15:41:38 +02:00
Joachim Wiberg 84fda1dd56 test/docker: update instructions on test and upload of new container
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-13 15:13:27 +02:00
Ahmed KaricandJoachim Wiberg b44932c614 "test/docker: add passlib to docker image" 2023-07-13 14:15:41 +02:00
Jon-Olov VatnandJoachim Wiberg 76c09ba3bd Timezone names as enumerated strings defined by IANA
Use timezone names defined in iana-timezones.yang, replacing
the type 'string' in standard ietf-system.yang

This enables CLI (tab complete) and NETCONF clients (dropdown)
to view available timezone strings, and the yang engine to
validate the input.
2023-07-12 08:51:27 +02:00
Jon-Olov VatnandJoachim Wiberg a43bdd94ab Limit username length and pattern in system yang model
Deviation in ietf-system.yang
'replace' username type from general string to a string
with length and pattern restrictions inline with the
BusyBox 'adduser' tool.

Note, chk_sr_user_update is more restrictive, which should
be handled.
2023-07-12 08:51:27 +02:00
Jon-Olov VatnandJoachim Wiberg 5c4982e388 Specify deviations for optional features (ietf-systems.yang)
Declaring deviations for optional features for clarity regaring
extent of support.

New revision and file of infix-systems created, as earlier version
was included in infix-2023.06 release.
Please see infix-systems@2023-04-11 for history.

Support and deviations has not been checked for the included
'sub-yang-module' infix-systems-software, thus there may be
more updates to come.
2023-07-12 08:51:27 +02:00
Ahmed KaricandJoachim Wiberg b0d3976ae0 test/case: Add interface status tests 2023-07-11 18:05:58 +02:00
Jon-Olov VatnandJoachim Wiberg a1a4491d37 Doc: Fixing hybrid-mode FRR example
two fixes
- first a typo (probably copy/paste issue)
- the sleep and 'vtysh -b' was added to make
  vtysh read the /etc/frr/frr.conf file upon start(*)
  sleep needed to make this happen after initctl reload

(*) See https://docs.frrouting.org/en/latest/vtysh.html#integrated-configuration-mode
But there ought to be a better way.
2023-07-06 16:54:22 +02:00
Ahmed KaricandJoachim Wiberg 7b99cdbd16 test/case: Add authentication/user test 2023-07-04 23:08:21 +02:00
Richard AlpeandJoachim Wiberg b3213c6228 statd: break out operational status into new daemon
This patch does two main things:
1) Breaks "statd" free from "confd".
2) Introduces netlink monitoring of interfaces for sysrepo data.

Prior to this patch, sysrepo operation status was handled by code
named "statd" inside "confd". (Where confd is a sysrepo-plugin and
not a real daemon, which its name implies)

In this patch, we break out the interface part of the operational
sysrepo status, previously "statd", into a new daemon, also called
"statd".

The main reason for doing this is to avoid sysrepo threading, which
allows the new "statd" to have control over sysrepo events in the
same event pool as netlink events from the kernel. This in turn allows
statd to subscribe and unsubscribe dynamically to interfaces that
comes and goes during runtime (such as vlans).

It also makes sense that "statd" is in fact a finit daemon.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-07-04 17:43:16 +02:00
Richard AlpeandJoachim Wiberg e26d4663d0 Increase rmem_max size
This allows an application to set a larger socket receive buffer size.
The default size is left unchanged (212992). 1MB is arbitrary chosen.

The main reason for this is to allow netlink kernel sockets to
hold more interface data while user-space is processing it. Typically
useful during main configuration changes where lots of kernel side
changes occur in short period of time, such as VLAN creation.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-07-04 17:43:16 +02:00
Joachim WibergandRichard Alpe 6befbf6a20 package: add missing LICENSE and LICENSE_FILES to packages
For some reason, the `make license-info` target complained klinfix
needed a hash file, but not the other local repos.  Issue #67 tracks
adding license-info to releases, which will need some looking into,
for now this fixes the most glaring packaging oversights.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-04 09:35:47 +02:00
Joachim WibergandRichard Alpe d2f83ef1b3 package: fix LICENSE_FILESS for klish family of packages
The packages have a misspelled license file. Sneaky

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-04 09:35:47 +02:00
Joachim WibergandRichard Alpe ff8cd981e1 .github: simplify expression guards
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-04 09:35:47 +02:00
Joachim WibergandRichard Alpe 259239ce5b package/confd: drop clean-etc script, fix #74
This script has some seriously sharp edges.  Today two devs cut their
fingers on it trying to get new functionality in place.  One when, in a
attempt at, adding an innocent status daemon, and another setting up a
client repository with a custom, enabled-by-default, daemon.  In both
instances this script happily cleaned out the deamons from enabled/.

A better alternative, as described in issue #74, is to be stricter on
what is enabled by default, and for things we feel provide value in the
Classic build, maintain a separate list of symlinks in its meta board
definitiion instead.

Also, clean out previous attempt at factory-config.  Now that we have
the auto-factory support in place we don't need this.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-04 09:35:47 +02:00
Joachim WibergandRichard Alpe 72e388458d board/common: drop sshd.conf symlink, enabled by skeleton-init-finit
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-04 09:35:47 +02:00
Joachim WibergandRichard Alpe 8ab2bdc625 package/querierd: don't enable service by default
In normal use-cases querierd needs a bridge with multicast-snooping
enabled to run.  No point in attempting to start querierd by default.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-04 09:35:47 +02:00
Joachim WibergandRichard Alpe 45466bcbc7 package/skeleton-init-finit: smcrouted default changes
- allow custom options sourced from optional /etc/default/smcrouted
 - don't enable smcrouted by default when enabled in Buildroot .config
   because normal use-cases require an /etc/smcroute.conf

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-04 09:35:47 +02:00
Joachim WibergandRichard Alpe f8666ddeb2 .github: possible fix of Bob's upload
Use same if: syntax for release/upload job as for build job.  Only thing
the upload job needs to ensure is that it does not try to upload built
artifacts from forks or from non-main builds.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-03 13:51:30 +02:00
Joachim WibergandRichard Alpe c8c0350859 .github: fix markdown link to doc/MAINTAINERS
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-03 13:51:30 +02:00
Joachim WibergandRichard Alpe d5c28bc454 package: replace TARGET_FINALIZE_HOOKS with POST_INSTALL
When calling `make foo-rebuild` one expects all the registered hooks in
the foo package to have been called by Buildroot.  The Buildroot manual
has this to say about the target-finalize hook:

> These hooks are run after all packages are built, but
> before the filesystem images are generated.  They are
> seldom used, and your package probably do not need them.

The correct hook to use for target packages is POST_INSTALL_TARGET_HOOK.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-03 13:51:30 +02:00
Joachim WibergandRichard Alpe de24d0389a package: relocate PROFINET packages to customer repo.
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-03 13:51:30 +02:00
Joachim WibergandRichard Alpe 93fe939f91 Fix #72: import up-to-date Debian /etc/services (OSPF, mDNS, etc.)
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-03 13:51:30 +02:00
Joachim WibergandTobias Waldekranz 77ef063185 klish: backport hotkey fixes, now Ctrl-D and Ctrl-Z work properly
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-07-01 14:39:42 +02:00
emihasandJoachim Wiberg 443b9cdf9f test/case: Add ietf_interfaces/ipv4_address.py
Verify that IPv4 addresses can be added and removed.
2023-06-30 18:38:59 +02:00
Tobias WaldekranzandJoachim Wiberg 7cf65f4c56 test/infamy: Support submitting edits containing deletions 2023-06-30 18:38:59 +02:00
Tobias WaldekranzandJoachim Wiberg 5be61a7013 test/case: Add ietf_system/upgrade
Verifies that RAUC bundles can be installed using NETCONF.

We choose to not add this to the "all" suite for now, as the qeneth
topologies do not run with full disk emulation.

To test locally, configure your "make run" instance to use the UEFI
loader, launch `make run`, and then run:

    make INFIX_TESTS=test/case/ietf_system/upgrade.py test-run
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg 4fb09267cf confd: Add a sysrepo interface to install RAUC bundles 2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg 6ca6a4e2f8 confd: Restructure list of source files
We were now at the point where it was completely impossible to see
which files are actually built.

Bring back some order, making future diffs easier to understand.
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg c4a1b2558d rauc: Increase maximum download size to 1 GiB
Default is 8 MiB which is, you know, not alot. Choose a very high
value and let the OS notify RAUC when the disk is full.
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg c4b7b2aa65 rauc: Enable service
The RAUC service exports a D-Bus API that fits well with NETCONF's
notion of RPCs and notifications.
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg f056e20558 rauc: Bundle RAUC status file in disk image
This let's us report the installed software versions, before any
updates have been made. Since the info should _not_ be erased in a
factory reset (since the installed software versions will not change),
move the status file to aux, which is the proper place for this class
of information.
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg 1b85d0c4e0 qemu: Restore 9p host mount support
This broke in the qemu-in-images-dir refactor when the config prefix
changed.
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg 193acaac6b qemu: Declare some missing dependencies in the configuration
- Only U-Boot can deal with the MMC disks at the moment
- Initrd's only make sense when starting QEMU with `-kernel`
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg f572f173da qemu: Refine serial setup
- When running with full disk emulation (via GRUB on x86, or U-Boot on
  aarch64), there's no way for us to influence the commandline passed
  to the kernel, so the console is fixed to ttyS0/AMA0. Therefore,
  reintroduce an option to choose the console.

- Use a fixed `nr`s for virtconsoles, so that the gdbserver always
  listens on `hvc1`. Ideally, we should use udevs `/dev/virtio-ports/*`
  symlinks, but for some reason these point to `/dev/vportXpY` and not
  to `/dev/hvcY`. TODO: Figure out what the difference is.

- While we're here, remove the duplicated RTC setup which was
  introduced with the virtio-console work a while back.
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg b02bba991d netboot: Consistently use /dev/ram0 as the root when ramloading
/dev/ram is accepted by the kernel during boot, but there's no actual
file with this name in /dev, so RAUC will get confused about which
slot is actually one we booted from.
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg 1202edc990 test: Ensure that the local pip environment is setup for test-run* 2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg be7b57412e test/case: Add meta/play
Launches an interactive ipython environment, attached to Infix nodes.
This can be used as a playground for developing tests, testing out
NETCONF operations, etc.
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg 6d6acda35d test/infamy: Patch netconf_client's logging to support IPv6
As an example, when running meta/play, a call to a device's `_debug()`
method will enable logging of all transmitted and received NETCONF
messages, which is very useful during debugging.
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg fd939f65ce test/infamy: Add helpers to access operational state 2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg 6fc131dace test/infamy: Add helpers to call actions and regular RPCs
As with config, the call can be described with a regular python
dictionary. As an example, to reboot the device:

    target.call_dict("ietf-system", { "system-restart": {} })
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg 60beca8820 test/infamy: Ensure that environment always has an ltop attribute
This fixes an issue where attaching to a device in an environment
without a logical topology would trigger an exception.
2023-06-30 15:33:10 +02:00
Tobias WaldekranzandJoachim Wiberg 31760e1c96 sysrepo-plugind: Require all plugins to load without error
If confd or statd fails to initialize, we want Finit to know about it.
2023-06-30 15:33:10 +02:00
Joachim WibergandTobias Waldekranz 772dbe9d64 test: add checklist for howto update the docker iamge
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 14:13:09 +02:00
Joachim WibergandTobias Waldekranz fcf3605e12 test/case: new regression test for IPv4 autoconf
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 14:13:09 +02:00
Joachim WibergandTobias Waldekranz ecdf2a1012 test: add fakeroot to the docker image
We need fakeroot for running tcpdump inside the container.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 14:13:09 +02:00
Joachim WibergandTobias Waldekranz b88348145c confd: fix regression in enabling ipv4 zeroconf address
To reproduce regression, before fix, in CLI from factory-default:

  > configure
  > set interfaces interface e0 ipv4 autoconf enable true
  > leave
  > shell
  $ ps; ip -br a

Turns out, for some reason I cannot figure out, that we cannot use the
same pattern as for ipv6 with lydx_get_descendant().  Manually fetching
the node works though.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 14:13:09 +02:00
Joachim WibergandTobias Waldekranz d6eca354b3 klish: add reboot and poweroff commands, for usability
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 14:13:09 +02:00
Joachim WibergandTobias Waldekranz ecc24d13cb confd: call avahi-set-host-name on hostname changes
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 14:13:09 +02:00
Joachim WibergandTobias Waldekranz e4a1261ad8 Fix #57: unneccesary lldpd restarts on configuration change
Instead of restarting lldpd we can call lldpcli to inform lldpd of the change.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 14:13:09 +02:00
Joachim WibergandTobias Waldekranz 6410a96d6d Fix #58: trim interface factory-defaults
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 14:13:09 +02:00
Joachim WibergandTobias Waldekranz c93edfb6a2 board: relocate NETCONF factory-default scripts
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 14:13:09 +02:00
Joachim WibergandTobias Waldekranz 4925636b2a Fix #56: relocate board/common auto-factory.d to board/netconf
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 14:13:09 +02:00
Joachim WibergandTobias Waldekranz 32e8e95088 Fix #60: add replace BusyBox ping with iputils-ping
Among other things, it supports -L when detecting IPv6 neighbors:

    ping -6 -L ff02::1%eth0

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 14:13:09 +02:00
Joachim WibergandTobias Waldekranz b2c77a2457 test/infamy: use factory-default rpc between tests
Instead of relying on startup-config == factory-config we can now set
running-config to factory-config using the factory-default rpc when
we prepare for a new test.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 13:37:12 +02:00
Joachim WibergandTobias Waldekranz 123317ce35 confd: add support for factory-default rpc
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 13:37:12 +02:00
Joachim WibergandTobias Waldekranz 8302ad9735 confd: fix missing RPC OK from system-restart et al
Use new APIs runbg() and run_status() to call 'reboot' or 'poweroff' in
the background.  This allows sysrepo + netopeer to reply to remote RPCs
before networking goes down.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 13:37:12 +02:00
Joachim WibergandTobias Waldekranz 2d453d0025 Fix #46: 'make run-menuconfig' needs buildroot-config/mconf
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 13:37:12 +02:00
Joachim WibergandTobias Waldekranz 0a40014d1b package/finit: backport fix to indefinite stall at reboot/shutdown
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 13:35:36 +02:00
Richard AlpeandJoachim Wiberg 9d63aeed61 confd: fix memory leak in lydx_new_path()
Prior to this patch, every new call to lydx_new_path() where "first"
was set to 1 resulted in a memory leak of 72 bytes. Typically at least
once for each sysrepo query.

The memory was allocated deep down in the lyd library, but as the
parent node wasn't set (NULL) it wasn't found by sysrepo when
cleaning up.

In this patch we mitigate this by simply removing the "first" concept,
as it doesn't appear to be needed.

Signed-off-by: Richard Alpe <richard@bit42.se>
2023-06-29 14:47:36 +02:00
Joachim Wiberg 6d536e1b3f Further clarify how to use containers in Infix
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-28 08:57:42 +02:00
Joachim Wiberg 15843f4325 doc/container.md: add Real Example and update Hybrid Mode
Add a real example where we create a writable layer for container based
on a simple image.

To be able to properly start/stop and monitor containers using Finit, we
need to add the options `--systemd=false` and `--conmon-pidfile=...`.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-27 11:55:40 +02:00
Joachim Wiberg a8f14b949c doc/container.md: use correct interface in cni host interface
We usually put the vethNb interfaces in the bridge and the vethNa end in
the appliance/container.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-25 22:47:06 +02:00
Joachim Wiberg 44983a4bd5 doc/cli.md: add diff to veth and bridge sections
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-25 15:27:48 +02:00
Joachim Wiberg cfa220a043 package/podman: log any console output from podman to syslog
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-25 13:11:46 +02:00
Joachim Wiberg 01455a08f8 doc/container.md: use unused host port 222 for container port 22
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-25 13:05:54 +02:00
Joachim Wiberg cc1845d62b doc/container.md: add section on debugging
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-25 12:53:37 +02:00
Joachim Wiberg 43c68de6f1 doc/container.md: update Multiple Networks and Hybrid Mode example
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-25 12:06:45 +02:00
Joachim Wiberg d99445c489 Fix Frr Hybrid Mode example and link to doc/container.md
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-25 12:06:17 +02:00
Joachim Wiberg eed5c2f206 doc/cli.md: update with a toc and help on veth pairs and bridging
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-25 11:56:42 +02:00
Joachim Wiberg 593a0626d1 doc: always lead with an example, put caveats last
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-24 18:42:42 +02:00
Joachim Wiberg 81f2e78984 Minor, spellcheck Buildroot
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-24 18:42:24 +02:00
315 changed files with 19480 additions and 8948 deletions
+7 -9
View File
@@ -2,16 +2,15 @@ Contributing to Infix
=====================
We welcome any and all help in the form of bug reports, fixes, patches
to add new features -- *preferably as GitHub pull requests*. Other
methods are of course also possible: emailing the [maintainers][] a
patch or even a raw file, a feature request or an alert of a problem.
to add new features -- *preferably as GitHub pull requests*.
If you are unsure of what to do, or how to implement an idea or bugfix,
open an issue with `"[RFC: Unsure if this is a bug ... ?"`, or use the
GitHub discussions forum, so we can discuss it. Talking about the code
first is the best way to get started before submitting a pull request.
If you are unsure of what to do, or how to implement an idea or bug fix,
open an issue with `"[RFC]: Unsure if this is a bug ... ?"`, or use the
[GitHub discussions forum](https://github.com/orgs/kernelkit/discussions).
Talking about code and problems first is often the best way to get started
before submitting a pull request.
Either way, when sending an email, patch, or pull request, start by
When submitting a bug report, patch, or pull request, please start by
stating the version the change is made against, what it does, and why.
Please take care to ensure you follow the project coding style and the
@@ -72,7 +71,6 @@ The *"maintainers have the right and responsibility to remove, edit,
or reject comments, commits, code, wiki edits, issues, and other
contributions that are not aligned to this Code of Conduct."*
[1]: ../doc/MAINTAINERS
[KNF]: https://en.wikipedia.org/wiki/Kernel_Normal_Form
[gitbook]: https://git-scm.com/book/ch5-2.html
[conduct]: CODE-OF-CONDUCT.md
+1
View File
@@ -0,0 +1 @@
Paid support and development provided by Addiva Elektronik <https://addiva.se>
+2 -2
View File
@@ -10,7 +10,7 @@ on:
jobs:
build:
if: ${{github.ref == 'refs/heads/main' && github.event_name == 'push'}} || github.event_name == 'workflow_dispatch'
if: ${{github.ref_name == 'main' && github.event_name == 'push'}} || github.event_name == 'workflow_dispatch'
name: Build ${{ matrix.platform }} ${{ matrix.variant }}
runs-on: ubuntu-latest
strategy:
@@ -72,7 +72,7 @@ jobs:
with:
path: output/${{ steps.vars.outputs.tgz }}
release:
if: github.repository == 'kernelkit/infix' && github.ref == 'refs/heads/main'
if: ${{github.repository_owner == 'kernelkit' && github.ref_name == 'main'}}
name: Upload Latest Build
needs: build
runs-on: ubuntu-latest
+6 -1
View File
@@ -19,6 +19,8 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
submodules: 'true'
- name: Set Build Variables
id: vars
run: |
@@ -61,4 +63,7 @@ jobs:
path: output/${{ steps.vars.outputs.tgz }}
- name: Regression Test
run: |
make test-qeneth
rc=true
make test-qeneth || rc=false
cat test/.log/last/result.md >> $GITHUB_STEP_SUMMARY
eval $rc
+2 -1
View File
@@ -78,10 +78,11 @@ jobs:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@v3
- name: Extract ChangeLog entry ...
run: |
awk '/-----*/{if (x == 1) exit; x=1;next}x' ChangeLog.md \
awk '/-----*/{if (x == 1) exit; x=1;next}x' doc/ChangeLog.md \
|head -n -1 > release.md
cat release.md
- uses: ncipollo/release-action@v1
+28
View File
@@ -0,0 +1,28 @@
# To enable automatic sync of your Infix fork every day, or on dispatch,
# set the repoistory or organisation variable (not secret):
#
# SYNC_FORK = 'true'
#
# You also need a GH_SYNC_REPO token allowed to update workflows. For
# more information on variables and secrets, see the GitHub docs.
# See https://docs.github.com/en/actions/learn-github-actions/variables
name: Synchronize your fork of Infix with upstream
on:
schedule:
- cron: 42 2 * * *
workflow_dispatch:
jobs:
sync_fork:
if: ${{github.repository_owner != 'kernelkit' && vars.SYNC_FORK == 'true' }}
runs-on: ubuntu-latest
steps:
- uses: TobKed/github-forks-sync-action@master
with:
github_token: ${{ secrets.GH_SYNC_REPO }}
upstream_repository: KernelKit/infix
upstream_branch: main
target_branch: main
force: false
tags: true
+3
View File
@@ -1,7 +1,10 @@
*~
.gdb_history
/.backup
/.ccache
/dl
/output*
/x-*
/test/.venv
/test/.log
/local.mk
+1 -1
Submodule 9pm updated: d8a9f678f2...f494f6b052
-58
View File
@@ -1,58 +0,0 @@
Change Log
==========
All notable changes to the project are documented in this file.
[v23.06.0][] - 2023-06-23
-------------------------
Midsummer release. The first official Infix release, based on [Buildroot
2023.02.2][br2023.02.2], with NETCONF support using the [sysrepo][] and
[netopeer2][].
Supported YANG models in addition to those used by sysrepo and netopeer:
- [ietf-system][]
- Everything except radius authentication and timezone-utc-offset
- Augmented with MotD (Message of the Day), Infix YANG model
- [ietf-interfaces][]
- [ietf-ip][] augmented with IPv4LL similar to standardized IPv6LL
- [ietf-if-vlan-encapsulation][], Linux VLAN interfaces, e.g. `eth0.10`
- Linux bridge interfaces with native VLAN support, Infix YANG model
- Linux VETH pairs, Infix YANG model
> **DISCLAIMER:** the [Infix YANG models for Linux][yang23.06], are
> still under heavy development. New revisions are expected which may
> not be backwards compatible. When upgrading to a new release, test on
> a GNS3 staging environment first, or start over from a factory reset.
[br2023.02.2]: https://git.busybox.net/buildroot/tag/?h=2023.02.2
[ietf-system]: https://www.rfc-editor.org/rfc/rfc7317.html
[ietf-interfaces]: https://www.rfc-editor.org/rfc/rfc7223.html
[ietf-ip]: https://www.rfc-editor.org/rfc/rfc8344.html
[ietf-if-vlan-encapsulation]: https://www.ietf.org/id/draft-ietf-netmod-sub-intf-vlan-model-08.html
[yang23.06]: https://github.com/kernelkit/infix/blob/aea74842e0475441d8df834f2dcd8cbc21fa253d/src/confd/yang/infix-interfaces%402023-06-05.yang
### Changes
- Bump sysrepo to v2.2.73
- Backport support for initializing factory-default data store with
default config data also for sysrepo internal modules.
- Add support for `sysrepocfg -Cfactory -d running`, for testing
- Bump netopeer2 to v2.1.62
- Bump libyang to v2.1.80
- Add klish, a CLI for sysrepo
- Add podman for container support, backported from upstream Buildroot
- Add conmon for container support, backported from upstream Buildroot
- Backport cni-plugins support for host-local and static plugins
### Fixes
- N/A
[buildroot]: https://buildroot.org/
[UNRELEASED]: https://github.com/kernelkit/infix/compare/v23.06.0...HEAD
[v23.06.0]: https://github.com/kernelkit/infix/compare/BASE...v23.06.0
[sysrepo]: https://www.sysrepo.org/
[netopeer2]: https://github.com/CESNET/netopeer2
+78 -207
View File
@@ -1,217 +1,88 @@
<img align="right" src="doc/text3134.png" alt="Infix Linux Networking Made Easy">
<img align="right" src="doc/logo.png" alt="Infix - Linux <3 NETCONF" width=480>
<details><summary><b>Documentation</b></summary>
* [Introduction](#introduction)
* [NETCONF Mode](#netconf-mode)
* [NETCONF Mode](#netconf-mode)
* [Classic Mode](#classic-mode)
* [Hybrid Mode](#hybrid-mode)
* [Hardware](#hardware)
* [Qemu](#qemu)
* [GNS3](#gns3)
* [Building](#building)
* [Origin & Licensing](origin--licensing)
- **Infix In-Depth**
- [Infix Variants](doc/variant.md)
- [Boot Procedure](doc/boot.md)
- [Containers in Infix](doc/container.md)
- [Developer's Guide](doc/developers-guide.md)
- [Discover Your Device](doc/discovery.md)
- [Virtual Environments](doc/virtual.md)
- [Origin & Licensing](doc/license.md)
- **CLI Topics**
- [Introduction to the CLI](doc/cli/introduction.md)
- [CLI User's Guide](doc/cli/tutorial.md)
- [Quick Overview](doc/cli/quick.md)
</details>
Introduction
------------
Infix is a Linux Network Operating System (NOS) based on [Buildroot][1],
and [sysrepo][2]. A powerful mix that ease porting to different
platforms, simplify long-term maintenance, and provide made-easy
management using NETCONF[^1] (remote) or the built-in [CLI][3].
Infix is an embedded Linux Network Operating System (NOS) based on
[Buildroot][1], [Finit][2], [ifupdown-ng][3], and [sysrepo][6].
Providing an easy-to-maintain and easy-to-port Open Source base for
networked equipment.
<details><summary><b>Example CLI Session</b></summary>
The CLI configure context is automatically generated from the loaded
YANG models and their corresponding [sysrepo][2] plugins. The following
is brief example of how to set the IP address of an interface:
```
admin@infix-12-34-56:/> configure
admin@infix-12-34-56:/config/> edit interfaces interface eth0
admin@infix-12-34-56:/config/interfaces/interface/eth0/> set ipv4 <TAB>
address autoconf bind-ni-name enabled
forwarding mtu neighbor
admin@infix-12-34-56:/config/interfaces/interface/eth0/> set ipv4 address 192.168.2.200 prefix-length 24
admin@infix-12-34-56:/config/interfaces/interface/eth0/> show
type ethernetCsmacd;
ipv4 address 192.168.2.200 prefix-length 24;
ipv6 enabled true;
admin@infix-12-34-56:/config/interfaces/interface/eth0/> diff
interfaces {
interface eth0 {
+ ipv4 {
+ address 192.168.2.200 {
+ prefix-length 24;
+ }
+ }
}
}
admin@infix-12-34-56:/config/interfaces/interface/eth0/> leave
admin@infix-12-34-56:/> show interfaces brief
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
eth0 UP 52:54:00:12:34:56 <BROADCAST,MULTICAST,UP,LOWER_UP>
admin@infix-12-34-56:/> show ip brief
lo UNKNOWN 127.0.0.1/8 ::1/128
eth0 UP 192.168.2.200/24 fe80::5054:ff:fe12:3456/64
admin@infix-12-34-56:/> copy running-config startup-config
```
[Click here][3] for more details.
</details>
Infix can run on many different types of architectures and boards, much
thanks to Linux and Buildroot. Currently the focus is on 64-bit ARM
devices, optionally with switching fabric supported by Linux switchdev.
The [following boards](board/aarch64/README.md) are fully supported:
- Marvell CN9130 CRB
- Marvell EspressoBIN
- Microchip SparX-5i PCB135 (eMMC)
An x86_64 build is also available, primarily intended for development
and testing, but can also be used for evaluation and demo purposes. For
more information, see: [Infix in Virtual Environments](doc/virtual.md).
> See the [GitHub Releases](https://github.com/kernelkit/infix/releases)
> page for out pre-built images. The *Latest Build* has the bleeding edge
> images, if possible we recommend using a versioned release.
> page for our pre-built images. The *Latest Build* has the bleeding
> edge images, if possible we recommend using a versioned release.
>
> For customer specific builds of Infix, see your respective repository.
> For *customer specific builds* of Infix, see your product repository.
Infix has two main *flavors*, or defconfigs:
[^1]: NETCONF or RESTCONF, <https://datatracker.ietf.org/doc/html/rfc8040>,
for more information, see [Infix Variants](doc/variant.md).
- **NETCONF:** the default, managed using, e.g., the `cli` tool
- **Classic:** built from `$ARCH_classic_defconfig`, more below
Both flavors have an `admin` user, which is allowed to log in from
remote, password `admin` on standard builds. It is the recommended
account to use for managing Infix. (The `root` account is currently
also available, but will soon become a non-login account used only for
running system services.)
### NETCONF Mode
NETCONF is the primary reason Infix exists. Configuration of an Infix
device can be done either remotely, using tools like [netconf-client][]
or [netopeer2-cli][], or locally using the [`cli` tool](doc/cli.md).
Infix use [sysrepo][6] as the data store for NETCONF. A set of plugins
configure the network, using iproute2, generate configuration files in
`/etc`, and control the system daemons, e.g., enable DHCP client on an
interface.
### Classic Mode
Here it is up to the administrator to modify configuration files in
`/etc` and control the system daemons using the `initctl` tool.
See the online `help` command for an introduction to the system.
### Hybrid Mode
Since Infix is under heavy development, it does not yet have all bells
and whistles in place, in particular in the default build. To that end
it is possible to manually manage certain services that are not yet
possible to configure using NETCONF.
At bootstrap Finit can start user scripts from a [run-parts(8)][] like
directory: `/cfg/start.d`. For example, the following starts OSPF:
```sh
root@infix:~$ mkdir /cfg/start.d
root@infix:~$ cd /cfg/start.d
root@infix:/cfg/start.d$ cat <<EOF >10-enable-ospf.sh
#!/bin/sh
# Use vtysh to modify the OSPF configuration
rm /etc/frr/frr.conf
ln -s /cfg/frr/frr.conf /etc/frr/
initctl enable zebra
initctl enable ospfd
initctl enable bfdd
exit 0
EOF
root@infix:/cfg/start.d$ chmod +x 10-enable-ospf.sh
```
> **Note:** Neither [Frr](https://frrouting.org) (Zebra/OSPF/BFD) or
> [podman](https://podman.io) are enabled in default Infix builds.
> Please use customer specific builds, or enable it yourself in Infix by
> using `make menuconfig` followed by rebuilding the image.
This is also the way to start containers (provided the images have been
downloaded with `podman pull` first):
```
root@infix:/cfg/start.d$ cat <<EOF >20-enable-container.sh
#!/bin/sh
podman-service -e -d "Nginx container" -p "-p 80:80" nginx:alpine
exit 0
EOF
root@infix:/cfg/start.d$ chmod +x 20-enable-container.sh
```
Reboot to activate the changes. To activate the changes without
rebooting, run the script and call `initctl reload`.
Hardware
--------
### aarch64
By default, Infix builds with support for the following boards (you
may enable additional boards in the config, of course):
- Marvell CN9130 CRB
- Marvell EspressoBIN
- Microchip SparX-5i PCB135 (eMMC)
See the aarch64 specific [documentation](board/aarch64/README.md) for more
information.
### x86_64
Primarily intended to be run under [QEMU][] for development & test as
well as evaluation, demo and [training][] purposes, e.g. using [GNS3][]
or [Qeneth][7].
QEMU
----
A virtualized instance can easily be launched from a Linux system, with
Qemu installed, by issuing `make run`.
Some settings, e.g. networking, can be configured via `make menuconfig`
under `External options -> QEMU virtualization`.
GNS3
----
Download the [latest build][0] of the `x86_64`, or `x86_64_classic`
flavor. Unpack in a dedicated directory and use ["Import Appliance"][9]
to install the `.gns3a` file into GNS3. Infix (`x86_64`) is in the
"Router" category, it has 10 interfaces available by default for use as
switch ports or routing. The *classic* build only has one interface by
default, geared more towards acting as an end device.
Building
--------
Buildroot is almost stand-alone, but need a few locally installed tools
to bootstrap itself. For details, see the [excellent manual][manual].
Briefly, to build an Infix image; select the target and then make:
make x86_64_defconfig
make
Online help is available:
make help
To see available defconfigs for supported targets, use:
make list-defconfigs
> **Note:** build dependencies (Debian/Ubuntu): <kbd>sudo apt install make libssl-dev</kbd>
Origin & Licensing
------------------
Infix is entirely built on Open Source components (packages). Most of
them, as well as the build system with its helper scripts and tools, is
from [Buiildroot][1], which is distributed under the terms of the GNU
General Public License (GPL). See the file COPYING for details.
Some files in Buildroot contain a different license statement. Those
files are licensed under the license contained in the file itself.
Buildroot and Infix also bundle patch files, which are applied to the
sources of the various packages. Those patches are not covered by the
license of Buildroot or Infix. Instead, they are covered by the license
of the software to which the patches are applied. When said software is
available under multiple licenses, the patches are only provided under
the publicly accessible licenses.
Infix releases include the license information covering all Open Source
packages. This is extracted automatically at build time using the tool
`make legal-info`. Any proprietary software built on top of Infix, or
Buildroot, would need separate auditing to ensure it does not link with
any GPL[^1] licensed library.
[^1]: Infix image builds use GNU libc (GLIBC) which is covered by the
[LGPL][4]. The LGPL *does allow* proprietary software, as long as
said software is linking dynamically, [not statically][5], to GLIBC.
[0]: https://github.com/kernelkit/infix/releases/tag/latest
[1]: https://buildroot.org/
[2]: https://github.com/troglobit/finit
[3]: https://github.com/ifupdown-ng/ifupdown-ng
[4]: https://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License
[5]: https://lwn.net/Articles/117972/
[6]: https://www.sysrepo.org/
[7]: https://github.com/wkz/qeneth
[8]: https://addiva-elektronik.github.io/2023/05/12/using-netconf-client-and-server-to-update-switch-configuration/
[9]: https://docs.gns3.com/docs/using-gns3/beginners/import-gns3-appliance/
[QEMU]: https://www.qemu.org/
[GNS3]: https://gns3.com/
[training]: https://addiva-elektronik.github.io/
[manual]: https://buildroot.org/downloads/manual/manual.html
[run-parts(8)]: https://manpages.ubuntu.com/manpages/trusty/man8/run-parts.8.html
[netconf-client]: https://pypi.org/project/netconf-client/
[netopeer2-cli]: https://github.com/CESNET/netopeer2
[2]: https://www.sysrepo.org/
[3]: doc/cli/introduction.md
@@ -0,0 +1,51 @@
/ {
config {
environment {
/* After the MMC driver has enabled bus power,
* the controller seems to sometimes detect a
* card removal state , which causes it to
* disable power again. This hack re-enables the
* bus power in those cases.
*/
bootcmd = "
setexpr.b pwrctl *0xf2780029
setexpr pwrctl ${pwrctl} \"|\" 1
mw.b 0xf2780029 ${pwrctl}
run ixboot
";
boot_targets = "mmc1";
ethprime = "eth1";
/* Uncomment this if you're debugging U-Boot
*
* This will allow you to break out of the
* normal boot flow and into the interactive
* console.
*
* To upgrade U-Boot itself, simply set the
* `bootfile` variable to the path of
* `flash-image.bin` on your TFTP server, then
* issue `run ixupgradeboot`.
*/
/* bootdelay = "2"; */
/* ixupgradeboot = " */
/* dhcp */
/* setexpr fileblks ${filesize} + 0x1ff */
/* setexpr fileblks ${fileblks} / 0x200 */
/* mmc dev 1 */
/* part start mmc 1 boot bootstart */
/* part size mmc 1 boot bootsize */
/* mmc erase ${bootstart} ${bootsize} */
/* mmc write ${fileaddr} ${bootstart} ${fileblks} */
/* "; */
};
};
};
/* &cp0_eth0 { */
/* phy-mode = "10gbase-r"; */
/* }; */
@@ -0,0 +1,4 @@
CONFIG_DEVICE_TREE_INCLUDES="infix-env.dtsi infix-key.dtsi cn9130-crb-env.dtsi"
CONFIG_ENV_IS_NOWHERE=y
# CONFIG_ENV_IS_IN_MMC is not set
@@ -1,3 +1,4 @@
label Infix (aarch64)
kernel /boot/Image
fdtdir /boot
append ${bootargs_root} ${bootargs_rauc} ${bootargs_log}
+3 -2
View File
@@ -1,9 +1,10 @@
[system]
compatible=infix-aarch64
bootloader=uboot
statusfile=/var/lib/rauc/status
statusfile=/mnt/aux/rauc.status
mountprefix=/var/lib/rauc/mnt
bundle-formats=-plain
max-bundle-download-size=1073741824
[keyring]
directory=/etc/rauc/keys
@@ -17,5 +18,5 @@ device=/dev/disk/by-partlabel/secondary
bootname=secondary
[slot.net.0]
device=/dev/ram
device=/dev/ram0
bootname=net
+18
View File
@@ -0,0 +1,18 @@
# System-wide .bashrc file for interactive bash(1) shells.
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
# Reevaluate for each line, in case hostname changes
function prompt_command
{
PS1="\u@$(hostname):\w\$ "
}
export PROMPT_COMMAND=prompt_command
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# Disble built-ins
enable -n help
+54 -1
View File
@@ -31,7 +31,7 @@ menuconfig DISK_IMAGE
- Creating a GNS3 appliance
- Developing/debugging issues in the boot process in QEMU
config DISK_IMAGE_SIZE
menuconfig DISK_IMAGE_SIZE
string "Image size"
depends on DISK_IMAGE
default "512M"
@@ -44,6 +44,59 @@ config DISK_IMAGE_SIZE
Minimum supported size is 512M.
choice
prompt "Bootloader"
depends on DISK_IMAGE
default DISK_IMAGE_BOOT_EFI if BR2_x86_64
default DISK_IMAGE_BOOT_NONE
config DISK_IMAGE_BOOT_NONE
bool "None"
help
Do not create any bootloader partition in the disk image.
config DISK_IMAGE_BOOT_EFI
bool "EFI"
help
Create a boot partition from a directory containing an EFI
boot application, e.g. GRUB.
config DISK_IMAGE_BOOT_BIN
bool "Binary"
help
Create a boot partition from a raw image containing the boot
application, e.g. U-Boot.
endchoice
config DISK_IMAGE_BOOT_DATA
string "Bootloader data"
depends on DISK_IMAGE
depends on DISK_IMAGE_BOOT_EFI || DISK_IMAGE_BOOT_BIN
default "${BINARIES_DIR}/efi-part/EFI" if BR2_x86_64
help
Path to the directory or file holding the bootloader data.
config DISK_IMAGE_BOOT_OFFSET
hex "Bootloader offset"
depends on DISK_IMAGE
depends on DISK_IMAGE_BOOT_EFI || DISK_IMAGE_BOOT_BIN
default 0x8000
help
Offset at which the bootloader partition is placed. Remember
to make sure that the GPT still fits at the start of the
image.
config DISK_IMAGE_RELEASE_URL
string "Infix URL"
depends on DISK_IMAGE
depends on !BR2_TARGET_ROOTFS_SQUASHFS
default "https://github.com/kernelkit/infix/releases/download/latest/infix-${BR2_ARCH}.tar.gz"
help
In situations where Infix itself is not being built, but a
disk image is, i.e. when building a bootloader: place this
Infix release in the primary and secondary partitions.
menuconfig GNS3_APPLIANCE
bool "GNS3 Appliance"
select DISK_IMAGE
+15 -4
View File
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Busybox version: 1.35.0
# Mon Dec 12 13:47:01 2022
# Busybox version: 1.36.0
# Fri Jul 7 17:59:34 2023
#
CONFIG_HAVE_DOT_CONFIG=y
@@ -93,6 +93,9 @@ CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
CONFIG_PASSWORD_MINLEN=6
CONFIG_MD5_SMALL=1
CONFIG_SHA1_SMALL=3
CONFIG_SHA1_HWACCEL=y
CONFIG_SHA256_HWACCEL=y
CONFIG_SHA3_SMALL=1
CONFIG_FEATURE_NON_POSIX_CP=y
# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set
@@ -123,6 +126,9 @@ CONFIG_LAST_SUPPORTED_WCHAR=0
# CONFIG_UNICODE_BIDI_SUPPORT is not set
# CONFIG_UNICODE_NEUTRAL_TABLE is not set
# CONFIG_UNICODE_PRESERVE_BROKEN is not set
# CONFIG_LOOP_CONFIGURE is not set
# CONFIG_NO_LOOP_CONFIGURE is not set
CONFIG_TRY_LOOP_CONFIGURE=y
#
# Applets
@@ -338,6 +344,7 @@ CONFIG_FEATURE_TR_CLASSES=y
CONFIG_FEATURE_TR_EQUIV=y
CONFIG_TRUE=y
CONFIG_TRUNCATE=y
CONFIG_TSORT=y
CONFIG_TTY=y
CONFIG_UNAME=y
CONFIG_UNAME_OSNAME="GNU/Linux"
@@ -526,13 +533,13 @@ CONFIG_USE_BB_CRYPT_SHA=y
CONFIG_ADDGROUP=y
CONFIG_FEATURE_ADDUSER_TO_GROUP=y
CONFIG_ADDUSER=y
# CONFIG_FEATURE_CHECK_NAMES is not set
CONFIG_FEATURE_CHECK_NAMES=y
CONFIG_LAST_ID=60000
CONFIG_FIRST_SYSTEM_ID=100
CONFIG_LAST_SYSTEM_ID=999
# CONFIG_CHPASSWD is not set
CONFIG_FEATURE_DEFAULT_PASSWD_ALGO="md5"
# CONFIG_CRYPTPW is not set
CONFIG_CRYPTPW=y
CONFIG_MKPASSWD=y
CONFIG_DELUSER=y
CONFIG_DELGROUP=y
@@ -831,10 +838,12 @@ CONFIG_READAHEAD=y
CONFIG_RFKILL=y
CONFIG_RUNLEVEL=y
CONFIG_RX=y
CONFIG_SEEDRNG=y
CONFIG_SETFATTR=y
CONFIG_SETSERIAL=y
CONFIG_STRINGS=y
CONFIG_TIME=y
CONFIG_TREE=y
CONFIG_TS=y
CONFIG_TTYSIZE=y
CONFIG_UBIATTACH=y
@@ -1007,6 +1016,7 @@ CONFIG_UDHCPC=y
CONFIG_FEATURE_UDHCPC_ARPING=y
CONFIG_FEATURE_UDHCPC_SANITIZEOPT=y
CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script"
CONFIG_UDHCPC6_DEFAULT_SCRIPT="/usr/share/udhcpc/default6.script"
CONFIG_UDHCPC6=y
CONFIG_FEATURE_UDHCPC6_RFC3646=y
CONFIG_FEATURE_UDHCPC6_RFC4704=y
@@ -1141,6 +1151,7 @@ CONFIG_ASH_IDLE_TIMEOUT=y
CONFIG_ASH_ECHO=y
CONFIG_ASH_PRINTF=y
CONFIG_ASH_TEST=y
CONFIG_ASH_SLEEP=y
CONFIG_ASH_HELP=y
CONFIG_ASH_GETOPTS=y
CONFIG_ASH_CMDCMD=y
+26 -7
View File
@@ -30,14 +30,14 @@ dimension()
cfgsize=$((256 << M))
# var is at least ~1.75G
elif [ $total -ge $((1 << G)) ]; then
bootsize=$(( 4 << M))
auxsize=$(( 4 << M))
bootsize=$(( 8 << M))
auxsize=$(( 8 << M))
imgsize=$((256 << M))
cfgsize=$(( 64 << M))
# var is at least ~0.5G
elif [ $total -ge $((512 << M)) ]; then
bootsize=$(( 4 << M))
auxsize=$(( 4 << M))
bootsize=$(( 8 << M))
auxsize=$(( 8 << M))
imgsize=$((192 << M))
cfgsize=$(( 16 << M))
# var is at least ~100M
@@ -80,7 +80,7 @@ probeboot()
genboot()
{
if [ -d $BINARIES_DIR/efi-part/EFI ]; then
if [ -d "$bootdata" ]; then
bootimg=$(cat <<EOF
image efi-part.vfat {
size = $bootsize
@@ -102,6 +102,17 @@ EOF
EOF
)
elif [ -f "$bootdata" ]; then
bootpart=$(cat <<EOF
partition boot {
offset = $bootoffs
partition-type-uuid = U
bootable = true
image = $bootdata
size = $bootsize
}
EOF
)
fi
}
@@ -110,15 +121,22 @@ root=$BUILD_DIR/genimage.root
tmp=$BUILD_DIR/genimage.tmp
total=$((512 << M))
bootoffs=
bootoffs=$((32 << K))
bootdata=
bootimg=
bootpart=
while getopts "a:s:" opt; do
while getopts "a:b:B:s:" opt; do
case ${opt} in
a)
arch=$OPTARG
;;
b)
bootdata=$OPTARG
;;
B)
bootoffs=$(($OPTARG))
;;
s)
total=$(size2int $OPTARG)
;;
@@ -157,6 +175,7 @@ awk \
mkdir -p $root/aux
cp -f $BINARIES_DIR/rootfs.itbh $root/aux/primary.itbh
cp -f $BINARIES_DIR/rootfs.itbh $root/aux/secondary.itbh
cp -f $BINARIES_DIR/rauc.status $root/aux/rauc.status
case "$arch" in
aarch64)
+12 -2
View File
@@ -18,12 +18,22 @@ load_cfg()
load_cfg
[ "$FIT_IMAGE" = "y" ] || exit 0
work=$(pwd)/build/fit-image-local
work=$BUILD_DIR/fit-image-local
dtbs=$(find $BINARIES_DIR -name '*.dtb')
kernel=$(find $BINARIES_DIR -name '*Image' | head -n1)
squash=$BINARIES_DIR/rootfs.squashfs
mkdir -p $work
gzip <$kernel >$work/Image.gz
kernel=$work/Image.gz
rm -rf $work/rootfs
unsquashfs -f -d $work/rootfs $squash
rm -f $work/rootfs/boot/*Image
squash=$work/rootfs-no-kernel.squashfs
rm -f $squash
mksquashfs $work/rootfs $squash
# mkimage will only align images to 4 bytes, but U-Boot will leave
# both DTB and ramdisk in place when starting the kernel. So we pad
@@ -79,7 +89,7 @@ cat <<EOF >$work/infix.its
arch = "$FIT_ARCH";
os = "linux";
$(cat $work/kernel-load.itsi)
compression = "none";
compression = "gzip";
data = /incbin/("$kernel");
};
+35
View File
@@ -0,0 +1,35 @@
#!/bin/sh
set -e
# Bootstrap a RAUC status file showing the newly created image
# installed to both the primary and secondary slots. This then bundled
# in the aux partition in mkdisk.sh, so that RAUC (on the target) can
# always report the installed versions.
rauc info --no-verify --output-format=shell $1 >/tmp/rauc-$$.info
. /tmp/rauc-$$.info
rm /tmp/rauc-$$.info
tstamp=$(date -u +%FT%TZ)
cat <<EOF
[slot.rootfs.0]
bundle.compatible=$RAUC_MF_COMPATIBLE
bundle.version=$RAUC_MF_VERSION
status=ok
sha256=$RAUC_IMAGE_DIGEST_0
size=$RAUC_IMAGE_SIZE_0
installed.timestamp=$tstamp
installed.count=1
activated.timestamp=$tstamp
activated.count=1
[slot.rootfs.1]
bundle.compatible=$RAUC_MF_COMPATIBLE
bundle.version=$RAUC_MF_VERSION
status=ok
sha256=$RAUC_IMAGE_DIGEST_0
size=$RAUC_IMAGE_SIZE_0
installed.timestamp=$tstamp
installed.count=1
activated.timestamp=$tstamp
activated.count=1
EOF
+1 -4
View File
@@ -3,11 +3,8 @@
set -e
GIT_VERSION=$(git -C $BR2_EXTERNAL_INFIX_PATH describe --always --dirty --tags)
if [ -n "$INFIX_RELEASE" ]; then
rel="-${INFIX_RELEASE}"
fi
name=$1${rel}
name=$1
arch=$2
sign=$3
+8 -3
View File
@@ -34,13 +34,18 @@ rm -f "$TARGET_DIR/etc/os-release"
echo "Infix by KernelKit $GIT_VERSION -- $(date +"%b %e %H:%M %Z %Y")" > "$TARGET_DIR/etc/version"
# Allow pdmenu (setup) and bash to be a login shells, bash
# is added automatically when selected in menuyconfig, but
# not when BusyBox provides a symlink (for ash).
# Allow pdmenu (setup) and bash to be login shells, bash is added
# automatically when selected in menuyconfig, but not when BusyBox
# provides a symlink (for ash). The /bin/{true,false} are old UNIX
# beart means of disabling a user.
grep -qsE '^/usr/bin/pdmenu$$' "$TARGET_DIR/etc/shells" \
|| echo "/usr/bin/pdmenu" >> "$TARGET_DIR/etc/shells"
grep -qsE '^/bin/bash$$' "$TARGET_DIR/etc/shells" \
|| echo "/bin/bash" >> "$TARGET_DIR/etc/shells"
grep -qsE '^/bin/true$$' "$TARGET_DIR/etc/shells" \
|| echo "/bin/true" >> "$TARGET_DIR/etc/shells"
grep -qsE '^/bin/false$$' "$TARGET_DIR/etc/shells" \
|| echo "/bin/false" >> "$TARGET_DIR/etc/shells"
# Menuconfig support for modifying Qemu args in release tarballs
cp "$BR2_EXTERNAL_INFIX_PATH/board/common/qemu/qemu.sh" "$BINARIES_DIR/"
+27 -10
View File
@@ -2,8 +2,10 @@
common=$(dirname "$(readlink -f "$0")")
. $common/lib.sh
load_cfg BR2_ARCH
load_cfg BR2_DEFCONFIG
load_cfg BR2_EXTERNAL_INFIX_PATH
load_cfg BR2_TARGET_ROOTFS
NAME=infix-$(basename "$BR2_DEFCONFIG" _defconfig | tr _ - | sed 's/x86-64/x86_64/')
ver()
@@ -23,14 +25,27 @@ if [ "$SIGN_ENABLED" = "y" ]; then
$common/sign.sh $BR2_ARCH $SIGN_KEY
ixmsg "Creating RAUC Update Bundle"
$common/mkrauc.sh $NAME $BR2_ARCH $SIGN_KEY
$common/mkrauc.sh "$NAME$(ver)" $BR2_ARCH $SIGN_KEY
fi
load_cfg DISK_IMAGE
load_cfg DISK_IMAGE_SIZE
if [ "$DISK_IMAGE" = "y" ]; then
ixmsg "Creating Disk Image"
$common/mkdisk.sh -a $BR2_ARCH -s $DISK_IMAGE_SIZE
bootcfg=
if [ "$DISK_IMAGE_BOOT_DATA" ]; then
bootcfg="-b $DISK_IMAGE_BOOT_DATA -B $DISK_IMAGE_BOOT_OFFSET"
fi
if [ "$BR2_TARGET_ROOTFS_SQUASHFS" != "y" ] && \
[ ! -f "$BINARIES_DIR/rootfs.squashfs" ]; then
ixmsg " Injecting $DISK_IMAGE_RELEASE_URL"
archive="$BINARIES_DIR/$(basename $DISK_IMAGE_RELEASE_URL)"
[ -f "$archive" ] || wget -O"$archive" "$DISK_IMAGE_RELEASE_URL"
tar -xa --strip-components=1 -C "$BINARIES_DIR" -f "$archive"
fi
$common/mkrauc-status.sh "$BINARIES_DIR/${NAME}.pkg" >"$BINARIES_DIR/rauc.status"
$common/mkdisk.sh -a $BR2_ARCH -s $DISK_IMAGE_SIZE $bootcfg
fi
load_cfg GNS3_APPLIANCE
@@ -47,12 +62,14 @@ if [ "$FIT_IMAGE" = "y" ]; then
$common/mkfit.sh
fi
if [ -z "${NAME##*minimal*}" ]; then
NAME=$(echo "$NAME" | sed 's/-minimal//')
fi
if [ "$BR2_TARGET_ROOTFS_SQUASHFS" = "y" ]; then
if [ -z "${NAME##*minimal*}" ]; then
NAME=$(echo "$NAME" | sed 's/-minimal//')
fi
rel=$(ver)
ln -sf rootfs.squashfs "$BINARIES_DIR/${NAME}${rel}.img"
if [ -n "$rel" ]; then
ln -sf "$BINARIES_DIR/${NAME}${rel}.img" "$BINARIES_DIR/${NAME}.img"
rel=$(ver)
ln -sf rootfs.squashfs "$BINARIES_DIR/${NAME}${rel}.img"
if [ -n "$rel" ]; then
ln -sf "$BINARIES_DIR/${NAME}${rel}.img" "$BINARIES_DIR/${NAME}.img"
fi
fi
+16 -7
View File
@@ -37,15 +37,30 @@ choice
config QEMU_ROOTFS_MMC
bool "MMC"
depends on QEMU_aarch64
config QEMU_ROOTFS_INITRD
bool "Initrd"
depends on QEMU_LOADER_KERNEL
config QEMU_ROOTFS_VSCSI
bool "Virtio SCSI"
endchoice
choice
prompt "Console"
default QEMU_CONSOLE_VIRTIO
config QEMU_CONSOLE_VIRTIO
bool "Virtio (hvc0)"
depends on QEMU_LOADER_KERNEL
config QEMU_CONSOLE_SERIAL
bool "Serial (ttyS0/ttyAMA0)"
endchoice
config QEMU_MACHINE
string
default "qemu-system-aarch64 -M virt -cpu cortex-a72 -m 256M" if QEMU_aarch64
@@ -68,12 +83,6 @@ config QEMU_ROOTFS
default "disk.img" if !QEMU_ROOTFS_INITRD
default "rootfs.squashfs" if QEMU_ROOTFS_INITRD
config QEMU_CONSOLE
string
depends on !QEMU_ROOTFS_MMC
default "ttyAMA0" if QEMU_aarch64
default "ttyS0" if QEMU_x86_64
config QEMU_DTB_EXTEND
bool
depends on QEMU_LOADER_UBOOT
@@ -127,7 +136,7 @@ endchoice
config QEMU_NET_MODEL
string "Interface model"
default "virtio"
default "virtio-net-pci"
config QEMU_NET_BRIDGE_DEV
string "Bridge device"
+55 -23
View File
@@ -69,14 +69,20 @@ loader_args()
append_args()
{
# Disabled, not needed anymore with virtconsole (hvc0)
# [ "$CONFIG_QEMU_CONSOLE" ] && echo -n "console=$CONFIG_QEMU_CONSOLE "
if [ "$CONFIG_QEMU_CONSOLE_VIRTIO" ]; then
echo -n "console=hvc0 "
elif [ "$CONFIG_QEMU_x86_64" ]; then
echo -n "console=ttyS0 "
elif [ "$CONFIG_QEMU_aarch64" ]; then
echo -n "console=ttyAMA0 "
else
die "Unknown console"
fi
echo -n "console=hvc0 "
if [ "$CONFIG_QEMU_ROOTFS_INITRD" = "y" ]; then
# Size of initrd, rounded up to nearest kb
local size=$((($(stat -c %s $CONFIG_QEMU_ROOTFS) + 1023) >> 10))
echo -n "root=/dev/ram ramdisk_size=${size} "
echo -n "root=/dev/ram0 ramdisk_size=${size} "
elif [ "$CONFIG_QEMU_ROOTFS_VSCSI" = "y" ]; then
echo -n "root=PARTLABEL=primary "
fi
@@ -103,6 +109,26 @@ rootfs_args()
fi
}
serial_args()
{
echo -n "-display none "
echo -n "-device virtio-serial "
echo -n "-chardev stdio,id=console0,mux=on "
echo -n "-mon chardev=console0 "
if [ "$CONFIG_QEMU_CONSOLE_VIRTIO" ]; then
echo -n "-device virtconsole,nr=0,name=console,chardev=console0 "
elif [ "$CONFIG_QEMU_CONSOLE_SERIAL" ]; then
echo -n "-serial chardev:console0 "
else
die "Unknown console"
fi
echo -n "-chardev socket,id=gdbserver,path=gdbserver.sock,server=on,wait=off "
echo -n "-device virtconsole,nr=1,name=gdbserver,chardev=gdbserver "
}
rw_args()
{
[ "$CONFIG_QEMU_RW" ] || return
@@ -126,31 +152,41 @@ rw_args()
host_args()
{
[ "${QEMU_HOST}" ] || return
[ "$CONFIG_QEMU_HOST" ] || return
echo -n "-virtfs local,path=${QEMU_HOST},security_model=none,writeout=immediate,mount_tag=hostfs "
echo -n "-virtfs local,path=$CONFIG_QEMU_HOST,security_model=none,writeout=immediate,mount_tag=hostfs "
}
net_dev_args()
{
local name="e$1"
local mac=$(printf "02:00:00:00:00:%02x" $1)
echo -n "-device $CONFIG_QEMU_NET_MODEL,netdev=$name,mac=$mac "
echo "$name $mac" >>"$mactab"
}
net_args()
{
QEMU_NET_MODEL=${QEMU_NET_MODEL:-virtio}
# Infix will pick up this file via fwcfg and install it to /etc
mactab=$(dirname "$CONFIG_QEMU_ROOTFS")/mactab
:> "$mactab"
echo -n "-fw_cfg name=opt/mactab,file=$mactab "
if [ "$CONFIG_QEMU_NET_BRIDGE" = "y" ]; then
QEMU_NET_BRIDGE_DEV=${QEMU_NET_BRIDGE_DEV:-virbr0}
echo -n "-nic bridge,br=$CONFIG_QEMU_NET_BRIDGE_DEV,model=$CONFIG_QEMU_NET_MODEL "
echo -n "-netdev bridge,id=e0,br=$CONFIG_QEMU_NET_BRIDGE_DEV "
net_dev_args 0
elif [ "$CONFIG_QEMU_NET_TAP" = "y" ]; then
QEMU_NET_TAP_N=${QEMU_NET_TAP_N:-1}
mactab=$(dirname "$CONFIG_QEMU_ROOTFS")/mactab
rm -f "$mactab"
for i in $(seq 0 $(($CONFIG_QEMU_NET_TAP_N - 1))); do
printf "e$i 52:54:00:12:34:%02x\n" $((0x56 + i)) >>"$mactab"
echo -n "-netdev tap,id=nd$i,ifname=qtap$i -device e1000,netdev=nd$i "
echo -n "-netdev tap,id=e$i,ifname=qtap$i "
net_dev_args $i
done
echo -n "-fw_cfg name=opt/mactab,file=$mactab "
elif [ "$CONFIG_QEMU_NET_USER" = "y" ]; then
[ "$CONFIG_QEMU_NET_USER_OPTS" ] && QEMU_NET_USER_OPTS="$CONFIG_QEMU_NET_USER_OPTS,"
local useropts=
[ "$CONFIG_QEMU_NET_USER_OPTS" ] && useropts=",$CONFIG_QEMU_NET_USER_OPTS"
echo -n "-nic user,${QEMU_NET_USER_OPTS}model=$CONFIG_QEMU_NET_MODEL "
echo -n "-netdev user,id=e0${useropts} "
net_dev_args 0
else
echo -n "-nic none"
fi
@@ -166,13 +202,9 @@ run_qemu()
local qemu
read qemu <<EOF
$CONFIG_QEMU_MACHINE \
-display none -rtc base=utc,clock=vm \
-device virtio-serial -chardev stdio,mux=on,id=console0 \
-device virtconsole,chardev=console0 -mon chardev=console0 \
-chardev socket,id=gdbserver,path=gdbserver.sock,server=on,wait=off \
-device virtconsole,name=console1,chardev=gdbserver \
$(loader_args) \
$(rootfs_args) \
$(serial_args) \
$(rw_args) \
$(host_args) \
$(net_args) \
@@ -219,7 +251,7 @@ generate_dot()
hostports="<qtap0> qtap0"
targetports="<e0> e0"
edges="host:qtap0 -- target:e0;"
edges="host:qtap0 -- target:e0 [kind=mgmt];"
for tap in $(seq 1 $(($CONFIG_QEMU_NET_TAP_N - 1))); do
hostports="$hostports | <qtap$tap> qtap$tap "
targetports="$targetports | <e$tap> e$tap "
@@ -1,5 +0,0 @@
{
"ietf-system:system": {
"hostname": "infix"
}
}
+88
View File
@@ -0,0 +1,88 @@
#!/bin/sh
# This file is part of avahi.
#
# avahi is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# avahi is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
# License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with avahi; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
# USA.
set -e
# Command line arguments:
# $1 event that happened:
# BIND: Successfully claimed address
# CONFLICT: An IP address conflict happened
# UNBIND: The IP address is no longer needed
# STOP: The daemon is terminating
# $2 interface name
# $3 IP adddress
PATH="$PATH:/usr/bin:/usr/sbin:/bin:/sbin"
# Use a different metric for each interface, so that we can set
# identical routes to multiple interfaces.
METRIC=$((1000 + `cat "/sys/class/net/$2/ifindex" 2>/dev/null || echo 0`))
if [ -x /bin/ip -o -x /sbin/ip ] ; then
# We have the Linux ip tool from the iproute package
case "$1" in
BIND)
ip addr flush dev "$2" label "$2:avahi"
ip addr add "$3"/16 brd 169.254.255.255 label "$2:avahi" scope link dev "$2" proto 6
ip route add default dev "$2" metric "$METRIC" scope link ||:
;;
CONFLICT|UNBIND|STOP)
ip route del default dev "$2" metric "$METRIC" scope link ||:
ip addr del "$3"/16 brd 169.254.255.255 label "$2:avahi" scope link dev "$2"
;;
*)
echo "Unknown event $1" >&2
exit 1
;;
esac
elif [ -x /bin/ifconfig -o -x /sbin/ifconfig ] ; then
# We have the old ifconfig tool
case "$1" in
BIND)
ifconfig "$2:avahi" inet "$3" netmask 255.255.0.0 broadcast 169.254.255.255 up
route add default dev "$2:avahi" metric "$METRIC" ||:
;;
CONFLICT|STOP|UNBIND)
route del default dev "$2:avahi" metric "$METRIC" ||:
ifconfig "$2:avahi" down
;;
*)
echo "Unknown event $1" >&2
exit 1
;;
esac
else
echo "No network configuration tool found." >&2
exit 1
fi
exit 0
-3
View File
@@ -13,6 +13,3 @@ export PROMPT_COMMAND=prompt_command
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# Disble built-ins
enable -n help
@@ -0,0 +1,141 @@
_cond()
{
initctl -pt cond dump | awk '{print $4}' | sed 's/<\(.*\)>/\1/'
}
_ident()
{
if [ -n "$1" ]; then
initctl ident | grep -q $1
else
initctl ident
fi
}
_svc()
{
initctl ls -pt | grep $1 | sed "s/.*\/\(.*\)/\1/g" | sort -u
}
_enabled()
{
echo "$(_svc enabled)"
}
_available()
{
all=$(mktemp)
ena=$(mktemp)
echo "$(_svc available)" >$all
echo "$(_svc enabled)" >$ena
grep -v -f $ena $all
rm $all $ena
}
# Determine first non-option word. Usually the command
_firstword() {
local firstword i
firstword=
for ((i = 1; i < ${#COMP_WORDS[@]}; ++i)); do
if [[ ${COMP_WORDS[i]} != -* ]]; then
firstword=${COMP_WORDS[i]}
break
fi
done
echo $firstword
}
# Determine last non-option word. Uusally a sub-command
_lastword() {
local lastword i
lastword=
for ((i = 1; i < ${#COMP_WORDS[@]}; ++i)); do
if [[ ${COMP_WORDS[i]} != -* ]] && [[ -n ${COMP_WORDS[i]} ]] && [[ ${COMP_WORDS[i]} != $cur ]]; then
lastword=${COMP_WORDS[i]}
fi
done
echo $lastword
}
_initctl()
{
local cur command
cur=${COMP_WORDS[COMP_CWORD]}
prev="${COMP_WORDS[COMP_CWORD-1]}"
firstword=$(_firstword)
lastword=$(_lastword)
commands="status cond debug help kill ls log version list enable \
disable touch show cat edit create delete reload start \
stop restart signal cgroup ps top plugins runlevel reboot \
halt poweroff suspend utmp"
cond_cmds="set get clear status dump"
cond_types="hook net pid service task usr"
signals="int term hup stop tstp cont usr1 usr2 pwr"
options="-b --batch \
-c --create \
-d --debug \
-f --force \
-h --help \
-j --json \
-n --noerr \
-1 --once \
-p --plain \
-q --quiet \
-t --no-heading \
-v --verbose \
-V --version"
case "${firstword}" in
enable)
COMPREPLY=($(compgen -W "$(_available)" -- $cur))
;;
disable|touch)
COMPREPLY=($(compgen -W "$(_enabled)" -- $cur))
;;
show|cat|edit|delete)
COMPREPLY=($(compgen -W "$(_svc .)" -- $cur))
;;
start|stop|restart|log|status)
COMPREPLY=($(compgen -W "$(_ident)" -- $cur))
;;
signal|kill)
if $(_ident "${prev}"); then
COMPREPLY=($(compgen -W "$signals" -- $cur))
else
COMPREPLY=($(compgen -W "$(_ident)" -- $cur))
fi
;;
cond)
case "${lastword}" in
set|clear)
compopt -o nospace
COMPREPLY=($(compgen -W "usr/" -- $cur))
;;
get)
COMPREPLY=($(compgen -W "$(_cond)" -- $cur))
;;
dump)
COMPREPLY=($(compgen -W "$cond_types" -- $cur))
;;
*)
COMPREPLY=($(compgen -W "$cond_cmds" -- $cur))
;;
esac
;;
*)
COMPREPLY=($(compgen -W "$commands" -- $cur))
;;
esac
if [[ $cur == -* ]]; then
COMPREPLY=($(compgen -W "$options" -- $cur))
fi
}
complete -F _initctl initctl
-1
View File
@@ -1,2 +1 @@
set COLORTERM=yes
runparts /cfg/start.d
@@ -0,0 +1 @@
service [2345789] log:prio:user.notice rauc service -- Software update service
+1
View File
@@ -0,0 +1 @@
../available/rauc.conf
@@ -1 +0,0 @@
../available/sshd.conf
-3
View File
@@ -11,9 +11,6 @@ sysfs /sys sysfs defaults 0 0
debugfs /sys/kernel/debug debugfs nofail 0 0
cfgfs /config configfs nofail,noauto 0 0
# Optional host share when running in Qemu
hostfs /host 9p nofail,cache=none,msize=16384 0 0
# The chosen backing storage for the overlays placed on /cfg, /etc,
# /home, /root, and /var, are determined dynamically by /lib/infix/mnt
# depending on the available devices.
+1
View File
@@ -1,2 +1,3 @@
1 port
2 iface
3 internal
@@ -0,0 +1,3 @@
4 static
5 dhcp
6 random
@@ -4,6 +4,8 @@ alias ll='ls -alF'
alias ls='ls --color=auto'
export EDITOR=/usr/bin/edit
export VISUAL=/usr/bin/edit
export LESS="-P %f (press h for help or q to quit)"
alias vim='vi'
alias view='vi -R'
alias emacs='mg'
@@ -15,6 +17,5 @@ alias ipb='ip -br'
alias ipaddr='ip addr'
alias iplink='ip link'
alias bridge='bridge --color=auto'
alias cli='klish'
alias docker=podman
+361
View File
@@ -0,0 +1,361 @@
# Network services, Internet style
#
# Updated from https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml .
#
# New ports will be added on request if they have been officially assigned
# by IANA and used in the real-world or are needed by a debian package.
# If you need a huge list of used numbers please install the nmap package.
tcpmux 1/tcp # TCP port service multiplexer
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
systat 11/tcp users
daytime 13/tcp
daytime 13/udp
netstat 15/tcp
qotd 17/tcp quote
chargen 19/tcp ttytst source
chargen 19/udp ttytst source
ftp-data 20/tcp
ftp 21/tcp
fsp 21/udp fspd
ssh 22/tcp # SSH Remote Login Protocol
telnet 23/tcp
smtp 25/tcp mail
time 37/tcp timserver
time 37/udp timserver
whois 43/tcp nicname
tacacs 49/tcp # Login Host Protocol (TACACS)
tacacs 49/udp
domain 53/tcp # Domain Name Server
domain 53/udp
bootps 67/udp
bootpc 68/udp
tftp 69/udp
gopher 70/tcp # Internet Gopher
finger 79/tcp
http 80/tcp www # WorldWideWeb HTTP
kerberos 88/tcp kerberos5 krb5 kerberos-sec # Kerberos v5
kerberos 88/udp kerberos5 krb5 kerberos-sec # Kerberos v5
iso-tsap 102/tcp tsap # part of ISODE
acr-nema 104/tcp dicom # Digital Imag. & Comm. 300
pop3 110/tcp pop-3 # POP version 3
sunrpc 111/tcp portmapper # RPC 4.0 portmapper
sunrpc 111/udp portmapper
auth 113/tcp authentication tap ident
nntp 119/tcp readnews untp # USENET News Transfer Protocol
ntp 123/udp # Network Time Protocol
epmap 135/tcp loc-srv # DCE endpoint resolution
netbios-ns 137/udp # NETBIOS Name Service
netbios-dgm 138/udp # NETBIOS Datagram Service
netbios-ssn 139/tcp # NETBIOS session service
imap2 143/tcp imap # Interim Mail Access P 2 and 4
snmp 161/tcp # Simple Net Mgmt Protocol
snmp 161/udp
snmp-trap 162/tcp snmptrap # Traps for SNMP
snmp-trap 162/udp snmptrap
cmip-man 163/tcp # ISO mgmt over IP (CMOT)
cmip-man 163/udp
cmip-agent 164/tcp
cmip-agent 164/udp
mailq 174/tcp # Mailer transport queue for Zmailer
xdmcp 177/udp # X Display Manager Control Protocol
bgp 179/tcp # Border Gateway Protocol
smux 199/tcp # SNMP Unix Multiplexer
qmtp 209/tcp # Quick Mail Transfer Protocol
z3950 210/tcp wais # NISO Z39.50 database
ipx 213/udp # IPX [RFC1234]
ptp-event 319/udp
ptp-general 320/udp
pawserv 345/tcp # Perf Analysis Workbench
zserv 346/tcp # Zebra server
rpc2portmap 369/tcp
rpc2portmap 369/udp # Coda portmapper
codaauth2 370/tcp
codaauth2 370/udp # Coda authentication server
clearcase 371/udp Clearcase
ldap 389/tcp # Lightweight Directory Access Protocol
ldap 389/udp
svrloc 427/tcp # Server Location
svrloc 427/udp
https 443/tcp # http protocol over TLS/SSL
https 443/udp # HTTP/3
snpp 444/tcp # Simple Network Paging Protocol
microsoft-ds 445/tcp # Microsoft Naked CIFS
kpasswd 464/tcp
kpasswd 464/udp
submissions 465/tcp ssmtp smtps urd # Submission over TLS [RFC8314]
saft 487/tcp # Simple Asynchronous File Transfer
isakmp 500/udp # IPSEC key management
rtsp 554/tcp # Real Time Stream Control Protocol
rtsp 554/udp
nqs 607/tcp # Network Queuing system
asf-rmcp 623/udp # ASF Remote Management and Control Protocol
qmqp 628/tcp
ipp 631/tcp # Internet Printing Protocol
ldp 646/tcp # Label Distribution Protocol
ldp 646/udp
#
# UNIX specific services
#
exec 512/tcp
biff 512/udp comsat
login 513/tcp
who 513/udp whod
shell 514/tcp cmd syslog # no passwords used
syslog 514/udp
printer 515/tcp spooler # line printer spooler
talk 517/udp
ntalk 518/udp
route 520/udp router routed # RIP
gdomap 538/tcp # GNUstep distributed objects
gdomap 538/udp
uucp 540/tcp uucpd # uucp daemon
klogin 543/tcp # Kerberized `rlogin' (v5)
kshell 544/tcp krcmd # Kerberized `rsh' (v5)
dhcpv6-client 546/udp
dhcpv6-server 547/udp
afpovertcp 548/tcp # AFP over TCP
nntps 563/tcp snntp # NNTP over SSL
submission 587/tcp # Submission [RFC4409]
ldaps 636/tcp # LDAP over SSL
ldaps 636/udp
tinc 655/tcp # tinc control port
tinc 655/udp
silc 706/tcp
kerberos-adm 749/tcp # Kerberos `kadmin' (v5)
#
domain-s 853/tcp # DNS over TLS [RFC7858]
domain-s 853/udp # DNS over DTLS [RFC8094]
rsync 873/tcp
ftps-data 989/tcp # FTP over SSL (data)
ftps 990/tcp
telnets 992/tcp # Telnet over SSL
imaps 993/tcp # IMAP over SSL
pop3s 995/tcp # POP-3 over SSL
#
# From ``Assigned Numbers'':
#
#> The Registered Ports are not controlled by the IANA and on most systems
#> can be used by ordinary user processes or programs executed by ordinary
#> users.
#
#> Ports are used in the TCP [45,106] to name the ends of logical
#> connections which carry long term conversations. For the purpose of
#> providing services to unknown callers, a service contact port is
#> defined. This list specifies the port used by the server process as its
#> contact port. While the IANA can not control uses of these ports it
#> does register or list uses of these ports as a convienence to the
#> community.
#
socks 1080/tcp # socks proxy server
proofd 1093/tcp
rootd 1094/tcp
openvpn 1194/tcp
openvpn 1194/udp
rmiregistry 1099/tcp # Java RMI Registry
lotusnote 1352/tcp lotusnotes # Lotus Note
ms-sql-s 1433/tcp # Microsoft SQL Server
ms-sql-m 1434/udp # Microsoft SQL Monitor
ingreslock 1524/tcp
datametrics 1645/tcp old-radius
datametrics 1645/udp old-radius
sa-msg-port 1646/tcp old-radacct
sa-msg-port 1646/udp old-radacct
kermit 1649/tcp
groupwise 1677/tcp
l2f 1701/udp l2tp
radius 1812/tcp
radius 1812/udp
radius-acct 1813/tcp radacct # Radius Accounting
radius-acct 1813/udp radacct
cisco-sccp 2000/tcp # Cisco SCCP
nfs 2049/tcp # Network File System
nfs 2049/udp # Network File System
gnunet 2086/tcp
gnunet 2086/udp
rtcm-sc104 2101/tcp # RTCM SC-104 IANA 1/29/99
rtcm-sc104 2101/udp
gsigatekeeper 2119/tcp
gris 2135/tcp # Grid Resource Information Server
cvspserver 2401/tcp # CVS client/server operations
venus 2430/tcp # codacon port
venus 2430/udp # Venus callback/wbc interface
venus-se 2431/tcp # tcp side effects
venus-se 2431/udp # udp sftp side effect
codasrv 2432/tcp # not used
codasrv 2432/udp # server port
codasrv-se 2433/tcp # tcp side effects
codasrv-se 2433/udp # udp sftp side effect
mon 2583/tcp # MON traps
mon 2583/udp
dict 2628/tcp # Dictionary server
f5-globalsite 2792/tcp
gsiftp 2811/tcp
gpsd 2947/tcp
gds-db 3050/tcp gds_db # InterBase server
icpv2 3130/udp icp # Internet Cache Protocol
isns 3205/tcp # iSNS Server Port
isns 3205/udp # iSNS Server Port
iscsi-target 3260/tcp
mysql 3306/tcp
ms-wbt-server 3389/tcp
nut 3493/tcp # Network UPS Tools
nut 3493/udp
distcc 3632/tcp # distributed compiler
daap 3689/tcp # Digital Audio Access Protocol
svn 3690/tcp subversion # Subversion protocol
suucp 4031/tcp # UUCP over SSL
sysrqd 4094/tcp # sysrq daemon
sieve 4190/tcp # ManageSieve Protocol
epmd 4369/tcp # Erlang Port Mapper Daemon
remctl 4373/tcp # Remote Authenticated Command Service
f5-iquery 4353/tcp # F5 iQuery
ntske 4460/tcp # Network Time Security Key Establishment
ipsec-nat-t 4500/udp # IPsec NAT-Traversal [RFC3947]
iax 4569/udp # Inter-Asterisk eXchange
mtn 4691/tcp # monotone Netsync Protocol
radmin-port 4899/tcp # RAdmin Port
sip 5060/tcp # Session Initiation Protocol
sip 5060/udp
sip-tls 5061/tcp
sip-tls 5061/udp
xmpp-client 5222/tcp jabber-client # Jabber Client Connection
xmpp-server 5269/tcp jabber-server # Jabber Server Connection
cfengine 5308/tcp
mdns 5353/udp # Multicast DNS
postgresql 5432/tcp postgres # PostgreSQL Database
freeciv 5556/tcp rptp # Freeciv gameplay
amqps 5671/tcp # AMQP protocol over TLS/SSL
amqp 5672/tcp
amqp 5672/sctp
x11 6000/tcp x11-0 # X Window System
x11-1 6001/tcp
x11-2 6002/tcp
x11-3 6003/tcp
x11-4 6004/tcp
x11-5 6005/tcp
x11-6 6006/tcp
x11-7 6007/tcp
gnutella-svc 6346/tcp # gnutella
gnutella-svc 6346/udp
gnutella-rtr 6347/tcp # gnutella
gnutella-rtr 6347/udp
redis 6379/tcp
sge-qmaster 6444/tcp sge_qmaster # Grid Engine Qmaster Service
sge-execd 6445/tcp sge_execd # Grid Engine Execution Service
mysql-proxy 6446/tcp # MySQL Proxy
babel 6696/udp # Babel Routing Protocol
ircs-u 6697/tcp # Internet Relay Chat via TLS/SSL
bbs 7000/tcp
afs3-fileserver 7000/udp
afs3-callback 7001/udp # callbacks to cache managers
afs3-prserver 7002/udp # users & groups database
afs3-vlserver 7003/udp # volume location database
afs3-kaserver 7004/udp # AFS/Kerberos authentication
afs3-volser 7005/udp # volume managment server
afs3-bos 7007/udp # basic overseer process
afs3-update 7008/udp # server-to-server updater
afs3-rmtsys 7009/udp # remote cache manager service
font-service 7100/tcp xfs # X Font Service
http-alt 8080/tcp webcache # WWW caching service
puppet 8140/tcp # The Puppet master service
bacula-dir 9101/tcp # Bacula Director
bacula-fd 9102/tcp # Bacula File Daemon
bacula-sd 9103/tcp # Bacula Storage Daemon
xmms2 9667/tcp # Cross-platform Music Multiplexing System
nbd 10809/tcp # Linux Network Block Device
zabbix-agent 10050/tcp # Zabbix Agent
zabbix-trapper 10051/tcp # Zabbix Trapper
amanda 10080/tcp # amanda backup services
dicom 11112/tcp
hkp 11371/tcp # OpenPGP HTTP Keyserver
db-lsp 17500/tcp # Dropbox LanSync Protocol
dcap 22125/tcp # dCache Access Protocol
gsidcap 22128/tcp # GSI dCache Access Protocol
wnn6 22273/tcp # wnn6
#
# Datagram Delivery Protocol services
#
rtmp 1/ddp # Routing Table Maintenance Protocol
nbp 2/ddp # Name Binding Protocol
echo 4/ddp # AppleTalk Echo Protocol
zip 6/ddp # Zone Information Protocol
#=========================================================================
# The remaining port numbers are not as allocated by IANA.
#=========================================================================
# Kerberos (Project Athena/MIT) services
kerberos4 750/udp kerberos-iv kdc # Kerberos (server)
kerberos4 750/tcp kerberos-iv kdc
kerberos-master 751/udp kerberos_master # Kerberos authentication
kerberos-master 751/tcp
passwd-server 752/udp passwd_server # Kerberos passwd server
krb-prop 754/tcp krb_prop krb5_prop hprop # Kerberos slave propagation
zephyr-srv 2102/udp # Zephyr server
zephyr-clt 2103/udp # Zephyr serv-hm connection
zephyr-hm 2104/udp # Zephyr hostmanager
iprop 2121/tcp # incremental propagation
supfilesrv 871/tcp # Software Upgrade Protocol server
supfiledbg 1127/tcp # Software Upgrade Protocol debugging
#
# Services added for the Debian GNU/Linux distribution
#
poppassd 106/tcp # Eudora
moira-db 775/tcp moira_db # Moira database
moira-update 777/tcp moira_update # Moira update protocol
moira-ureg 779/udp moira_ureg # Moira user registration
spamd 783/tcp # spamassassin daemon
skkserv 1178/tcp # skk jisho server port
predict 1210/udp # predict -- satellite tracking
rmtcfg 1236/tcp # Gracilis Packeten remote config server
xtel 1313/tcp # french minitel
xtelw 1314/tcp # french minitel
zebrasrv 2600/tcp # zebra service
zebra 2601/tcp # zebra vty
ripd 2602/tcp # ripd vty (zebra)
ripngd 2603/tcp # ripngd vty (zebra)
ospfd 2604/tcp # ospfd vty (zebra)
bgpd 2605/tcp # bgpd vty (zebra)
ospf6d 2606/tcp # ospf6d vty (zebra)
ospfapi 2607/tcp # OSPF-API
isisd 2608/tcp # ISISd vty (zebra)
fax 4557/tcp # FAX transmission service (old)
hylafax 4559/tcp # HylaFAX client-server protocol (new)
munin 4949/tcp lrrd # Munin
rplay 5555/udp # RPlay audio service
nrpe 5666/tcp # Nagios Remote Plugin Executor
nsca 5667/tcp # Nagios Agent - NSCA
canna 5680/tcp # cannaserver
syslog-tls 6514/tcp # Syslog over TLS [RFC5425]
sane-port 6566/tcp sane saned # SANE network scanner daemon
ircd 6667/tcp # Internet Relay Chat
zope-ftp 8021/tcp # zope management by ftp
tproxy 8081/tcp # Transparent Proxy
omniorb 8088/tcp # OmniORB
clc-build-daemon 8990/tcp # Common lisp build daemon
xinetd 9098/tcp
git 9418/tcp # Git Version Control System
zope 9673/tcp # zope server
webmin 10000/tcp
kamanda 10081/tcp # amanda backup services (Kerberos)
amandaidx 10082/tcp # amanda backup services
amidxtape 10083/tcp # amanda backup services
sgi-cmsd 17001/udp # Cluster membership services daemon
sgi-crsd 17002/udp
sgi-gcd 17003/udp # SGI Group membership daemon
sgi-cad 17004/tcp # Cluster Admin daemon
binkp 24554/tcp # binkp fidonet protocol
asp 27374/tcp # Address Search Protocol
asp 27374/udp
csync2 30865/tcp # cluster synchronization tool
dircproxy 57000/tcp # Detachable IRC Proxy
tfido 60177/tcp # fidonet EMSI over telnet
fido 60179/tcp # fidonet EMSI over TCP
# Local services
@@ -1 +1,2 @@
net.core.fb_tunnels_only_for_init_net=2
net.core.rmem_max=1000000
@@ -1 +0,0 @@
local7.* -/var/log/profinet.log
+1 -8
View File
@@ -25,7 +25,7 @@ for netif in /sys/class/net/*; do
dsa="dsa$num"
logger -k -p user.notice -t "$ident" "Found DSA interface, renaming $iface -> $dsa"
ip link set dev "$iface" name $dsa
ip link set dev "$iface" name $dsa group internal
num=$((num + 1))
done
@@ -35,12 +35,5 @@ for iface in $ports; do
ip link set "$iface" group port
done
# Testing, e.g., using /etc/mactab may use TAP devices to create
# emulated switch ports, make sure to mark them as well
ports=$(ip -json link | jq -r '.[].ifname | match("^e[[:digit:]]+").string')
for iface in $ports; do
ip link set "$iface" group port
done
# At least loopback in iface group
ip link set lo group iface
@@ -4,11 +4,14 @@
# existing interfaces. This syncs the default settings to all known
# interfaces at boot, such that physical interfaces will start from
# the same point as virtual ones.
tmp=$(mktemp)
sysctl net.ipv4.conf.default >/tmp/sysctl-ip-default
sysctl net.ipv6.conf.default >>/tmp/sysctl-ip-default
sysctl net.ipv4.conf.default >$tmp
sysctl net.ipv6.conf.default >>$tmp
for iface in $(ip -j link show | jq -r .[].ifname); do
sed -e "s/.default./.${iface}./g" /tmp/sysctl-ip-default \
| sysctl -p -
sed -e "s/.default./.${iface}./g" $tmp | sysctl -p -
done
rm $tmp
+1 -1
View File
@@ -1 +1 @@
nano
mg
+1 -1
View File
@@ -1 +1 @@
nano
mg
+134
View File
@@ -0,0 +1,134 @@
#!/bin/sh
# udhcpc script edited by Tim Riker <Tim@Rikers.org>
[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1
ACTION="$1"
RESOLV_CONF="/etc/resolv.conf"
[ -e $RESOLV_CONF ] || touch $RESOLV_CONF
[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
[ -n "$subnet" ] && NETMASK="$subnet"
# Handle stateful DHCPv6 like DHCPv4
[ -n "$ipv6" ] && ip="$ipv6/128"
if [ -z "${IF_WAIT_DELAY}" ]; then
IF_WAIT_DELAY=10
fi
wait_for_ipv6_default_route() {
printf "Waiting for IPv6 default route to appear"
while [ $IF_WAIT_DELAY -gt 0 ]; do
if ip -6 route list | grep -q default; then
printf "\n"
return
fi
sleep 1
printf "."
: $((IF_WAIT_DELAY -= 1))
done
printf " timeout!\n"
}
flush_dhcp_addresses() {
addrs=$(ip -j addr show dev $interface | jq -c \
'.[0].addr_info[] | select(.family == "inet") | select(.protocol == "dhcp")')
for addr in $addrs; do
ip="$(echo "$addr" | jq -r '."local"')"
prefix="$(echo "$addr" | jq -r '."prefixlen"')"
ip addr del "$ip/$prefix" dev "$interface"
done
}
case "$ACTION" in
deconfig)
flush_dhcp_addresses
/bin/ip link set dev $interface up
# drop info from this interface
# resolv.conf may be a symlink to /tmp/, so take care
TMPFILE=$(mktemp)
grep -vE "# $interface\$" $RESOLV_CONF > $TMPFILE
cat $TMPFILE > $RESOLV_CONF
rm -f $TMPFILE
if [ -x /usr/sbin/avahi-autoipd ]; then
/usr/sbin/avahi-autoipd -c $interface && /usr/sbin/avahi-autoipd -k $interface
fi
;;
leasefail|nak)
if [ -x /usr/sbin/avahi-autoipd ]; then
/usr/sbin/avahi-autoipd -c $interface || /usr/sbin/avahi-autoipd -wD $interface --no-chroot
fi
;;
renew|bound)
if [ -x /usr/sbin/avahi-autoipd ]; then
/usr/sbin/avahi-autoipd -c $interface && /usr/sbin/avahi-autoipd -k $interface
fi
/bin/ip addr add dev $interface $ip/$NETMASK $BROADCAST proto 5
if [ -n "$ipv6" ] ; then
wait_for_ipv6_default_route
fi
# RFC3442: If the DHCP server returns both a Classless
# Static Routes option and a Router option, the DHCP
# client MUST ignore the Router option.
if [ -n "$staticroutes" ]; then
echo "deleting routers"
route -n | while read dest gw mask flags metric ref use iface; do
[ "$iface" != "$interface" -o "$gw" = "0.0.0.0" ] || \
route del -net "$dest" netmask "$mask" gw "$gw" dev "$interface"
done
# format: dest1/mask gw1 ... destn/mask gwn
set -- $staticroutes
while [ -n "$1" -a -n "$2" ]; do
route add -net "$1" gw "$2" dev "$interface"
shift 2
done
elif [ -n "$router" ] ; then
echo "deleting routers"
while route del default gw 0.0.0.0 dev $interface 2> /dev/null; do
:
done
for i in $router ; do
route add default gw $i dev $interface
done
fi
# drop info from this interface
# resolv.conf may be a symlink to /tmp/, so take care
TMPFILE=$(mktemp)
grep -vE "# $interface\$" $RESOLV_CONF > $TMPFILE
cat $TMPFILE > $RESOLV_CONF
rm -f $TMPFILE
# prefer rfc3397 domain search list (option 119) if available
if [ -n "$search" ]; then
search_list=$search
elif [ -n "$domain" ]; then
search_list=$domain
fi
[ -n "$search_list" ] &&
echo "search $search_list # $interface" >> $RESOLV_CONF
for i in $dns ; do
echo adding dns $i
echo "nameserver $i # $interface" >> $RESOLV_CONF
done
;;
esac
HOOK_DIR="$0.d"
for hook in "${HOOK_DIR}/"*; do
[ -f "${hook}" -a -x "${hook}" ] || continue
"${hook}" "$ACTION"
done
exit 0
+6
View File
@@ -3,11 +3,17 @@ CONFIG_DEVICE_TREE_INCLUDES="infix-env.dtsi infix-key.dtsi"
CONFIG_ENV_IMPORT_FDT=y
CONFIG_RSA=y
CONFIG_RSA_VERIFY=y
CONFIG_FIT=y
CONFIG_FIT_SIGNATURE=y
CONFIG_BLKMAP=y
CONFIG_NET_RANDOM_ETHADDR=y
CONFIG_DISTRO_DEFAULTS=y
CONFIG_CMD_SETEXPR=y
CONFIG_CMD_SETEXPR_FMT=y
CONFIG_MMC=y
+2
View File
@@ -2,9 +2,11 @@ for tgt in "${boot_targets}"; do
if test "${tgt}" = "mmc0"; then
setenv devtype "mmc"
setenv devnum 0
mmc dev 0
elif test "${tgt}" = "mmc1"; then
setenv devtype "mmc"
setenv devnum 1
mmc dev 1
else
setenv devtype "${tgt}"
setenv devnum 0
+1 -1
View File
@@ -5,7 +5,7 @@ if test "${slot}" = "primary"; then
run ixprepblk
elif test "${slot}" = "secondary"; then
run ixprepblk
elif test "${slot}" = "dhcp"; then
elif test "${slot}" = "net"; then
run ixprepdhcp
fi
+1 -1
View File
@@ -10,7 +10,7 @@ if load ${devtype} ${devnum}:${auxpart} ${ramdisk_addr_r} /${slot}.itbh; then
if part start ${devtype} ${devnum} ${slot} devoffs; then
if ${devtype} read ${sqaddr} ${devoffs} ${sqblkcnt}; then
setenv bootargs_root "root=PARTLABEL=${slot}"
setenv bootargs_root "root=PARTLABEL=${slot} rootwait"
setenv prepared ok
fi
fi
+4
View File
@@ -7,3 +7,7 @@ if [ -L "$TARGET_DIR/var/lib/avahi-autoipd" ]; then
rm "$TARGET_DIR/var/lib/avahi-autoipd"
mkdir "$TARGET_DIR/var/lib/avahi-autoipd"
fi
# Allow clish (symlink to /usr/bin/klish) to be a login shell
grep -qsE '^/bin/clish$$' "$TARGET_DIR/etc/shells" \
|| echo "/bin/clish" >> "$TARGET_DIR/etc/shells"
+1
View File
@@ -0,0 +1 @@
../usr/bin/klish
@@ -4,7 +4,8 @@
"user": [
{
"name": "admin",
"password": "$6$bKPp6xu45L1cmp70$fcwDhGZct4q8LxwPASf9iVHyWqnklcdjeYi/SupLo1K9nb.aAQUz48.3qTcW38XL6gQzfHyGoyeDG2orjPUwm1"
"password": "$6$bKPp6xu45L1cmp70$fcwDhGZct4q8LxwPASf9iVHyWqnklcdjeYi/SupLo1K9nb.aAQUz48.3qTcW38XL6gQzfHyGoyeDG2orjPUwm1",
"infix-system:shell": "infix-shell-type:clish"
}
]
}
@@ -0,0 +1,14 @@
{
"ietf-system:system": {
"hostname": "infix"
},
"ieee802-dot1ab-lldp:lldp": {
"infix-lldp:enabled": true
},
"infix-services:mdns": {
"enabled": true
},
"infix-services:ssdp": {
"enabled": true
}
}
@@ -0,0 +1 @@
alias cli='clish'
@@ -13,11 +13,15 @@ gen-interfaces >$FACTORY_D/20-auto-interfaces.json
[ -s $GENCFG_D/20-auto-hostkey.json ] || gen-hostkeys >$GENCFG_D/20-auto-hostkey.json
# Allow regenerating default factory-config, but keep it read-ony
# to prevent it from being overwritten by mistake by users.
rm -f $CFG_D/auto-factory-config.cfg
# shellcheck disable=SC2046
jq -s 'reduce .[] as $item ({}; . * $item)' \
$(find $FACTORY_D -name '*.json') \
$(find $GENCFG_D -name '*.json') \
>$CFG_D/auto-factory-config.cfg
>$CFG_D/auto-factory-config.cfg
chmod 444 $CFG_D/auto-factory-config.cfg
# TODO: Look for statically defined factory-config, based on the
# system's product ID.
@@ -28,4 +32,4 @@ jq -s 'reduce .[] as $item ({}; . * $item)' \
ln -sf auto-factory-config.cfg $CFG_D/factory-config.cfg
# Bootstrap sysrepo db with all modules required by confd
sysrepo-bootstrap.sh $CFG_D/factory-config.cfg $CFG_D/startup-config.cfg
/usr/libexec/confd/confd-bootstrap.sh $CFG_D/factory-config.cfg $CFG_D/startup-config.cfg
+244
View File
@@ -0,0 +1,244 @@
#!/usr/bin/env python3
import json
import sys
import argparse
parser = argparse.ArgumentParser(description="JSON CLI Pretty Printer")
parser.add_argument("module", help="IETF Module")
parser.add_argument("-n", "--name", help="Focus on specific name")
args = parser.parse_args()
class Pad:
iface = 16
proto = 11
state = 12
data = 41
class Decore():
@staticmethod
def decorate(sgr, txt, restore="0"):
return f"\033[{sgr}m{txt}\033[{restore}m"
@staticmethod
def invert(txt):
return Decore.decorate("7", txt)
@staticmethod
def red(txt):
return Decore.decorate("31", txt, "39")
@staticmethod
def green(txt):
return Decore.decorate("32", txt, "39")
class Iface:
def __init__(self, data):
self.data = data
self.name = data.get('name', '')
self.index = data.get('if-index', '')
self.oper_status = data.get('oper-status', '')
self.phys_address = data.get('phys-address', '')
if data.get('statistics'):
self.in_octets = data.get('statistics').get('in-octets', '')
self.out_octets = data.get('statistics').get('out-octets', '')
else:
self.in_octets = ''
self.out_octets = ''
self.parent = data.get('ietf-if-extensions:parent-interface', None)
if self.data.get('ietf-ip:ipv4'):
self.mtu = self.data.get('ietf-ip:ipv4').get('mtu', '')
self.ipv4_addr = self.data.get('ietf-ip:ipv4').get('address', '')
else:
self.mtu = ''
self.ipv4_addr = []
if self.data.get('ietf-ip:ipv6'):
self.ipv6_addr = self.data.get('ietf-ip:ipv6').get('address', '')
else:
self.ipv6_addr = []
if self.data.get('infix-interfaces:bridge-port'):
self.bridge = self.data.get('infix-interfaces:bridge-port').get('bridge', None)
else:
self.bridge = ''
def is_vlan(self):
return self.data['type'] == "infix-if-type:vlan"
def is_bridge(self):
return self.data['type'] == "infix-if-type:bridge"
def pr_name(self, pipe=""):
print(f"{pipe}{self.name:<{Pad.iface - len(pipe)}}", end="")
def pr_proto_ipv4(self, pipe=''):
for addr in self.ipv4_addr:
origin = f"({addr['origin']})" if addr.get('origin') else ""
row = f"{pipe:<{Pad.iface}}"
row += f"{'ipv4':<{Pad.proto}}"
row += f"{'':<{Pad.state}}{addr['ip']}/{addr['prefix-length']} {origin}"
print(row)
def pr_proto_ipv6(self, pipe=''):
for addr in self.ipv6_addr:
origin = f"({addr['origin']})" if addr.get('origin') else ""
row = f"{pipe:<{Pad.iface}}"
row += f"{'ipv6':<{Pad.proto}}"
row += f"{'':<{Pad.state}}{addr['ip']}/{addr['prefix-length']} {origin}"
print(row)
def pr_proto_eth(self):
row = f"{'ethernet':<{Pad.proto}}"
dec = Decore.green if self.data['oper-status'] == "up" else Decore.red
row += dec(f"{self.data['oper-status'].upper():<{Pad.state}}")
row += f"{self.data['phys-address']:<{Pad.data}}"
print(row)
def pr_bridge(self, _ifaces):
self.pr_name(pipe="")
self.pr_proto_eth()
lowers = []
for _iface in [Iface(data) for data in _ifaces]:
if _iface.bridge and _iface.bridge == self.name:
lowers.append(_iface)
if lowers:
self.pr_proto_ipv4(pipe='│')
self.pr_proto_ipv6(pipe='│')
else:
self.pr_proto_ipv4()
self.pr_proto_ipv6()
for i, lower in enumerate(lowers):
pipe = '└ ' if (i == len(lowers) -1) else '├ '
lower.pr_name(pipe)
lower.pr_proto_eth()
def pr_vlan(self, _ifaces):
self.pr_name(pipe="")
self.pr_proto_eth()
if self.parent:
self.pr_proto_ipv4(pipe='│')
self.pr_proto_ipv6(pipe='│')
else:
self.pr_proto_ipv4()
self.pr_proto_ipv6()
return
parent = find_iface(_ifaces, self.parent)
if not parent:
print(f"Error, didn't find parent interface for vlan {self.name}")
sys.exit(1)
parent.pr_name(pipe='└ ')
parent.pr_proto_eth()
def pr_iface(self):
print(f"{'name':<{20}}: {self.name}")
print(f"{'index':<{20}}: {self.index}")
if self.mtu:
print(f"{'mtu':<{20}}: {self.mtu}")
if self.oper_status:
print(f"{'operational status':<{20}}: {self.oper_status}")
if self.phys_address:
print(f"{'physical address':<{20}}: {self.phys_address}")
if self.ipv4_addr:
first = True
for addr in self.ipv4_addr:
origin = f"({addr['origin']})" if addr.get('origin') else ""
key = 'ipv4 addresses' if first else ''
colon = ':' if first else ' '
row = f"{key:<{20}}{colon} "
row += f"{addr['ip']}/{addr['prefix-length']} {origin}"
print(row)
first = False
else:
print(f"{'ipv4 addresses':<{20}}:")
if self.ipv6_addr:
first = True
for addr in self.ipv6_addr:
origin = f"({addr['origin']})" if addr.get('origin') else ""
key = 'ipv6 addresses' if first else ''
colon = ':' if first else ' '
row = f"{key:<{20}}{colon} "
row += f"{addr['ip']}/{addr['prefix-length']} {origin}"
print(row)
first = False
else:
print(f"{'ipv6 addresses':<{20}}:")
if self.in_octets and self.out_octets:
print(f"{'in-octets':<{20}}: {self.in_octets}")
print(f"{'out-octets':<{20}}: {self.out_octets}")
def find_iface(_ifaces, name):
for _iface in [Iface(data) for data in _ifaces]:
if _iface.name == name:
return _iface
return False
def pr_interface_list(json):
hdr = (f"{'INTERFACE':<{Pad.iface}}"
f"{'PROTOCOL':<{Pad.proto}}"
f"{'STATE':<{Pad.state}}"
f"{'DATA':<{Pad.data}}")
print(Decore.invert(hdr))
ifaces = sorted(json["ietf-interfaces:interfaces"]["interface"], key=lambda x: x['name'])
for iface in [Iface(data) for data in ifaces]:
if iface.is_bridge():
iface.pr_bridge(ifaces)
continue
if iface.is_vlan():
iface.pr_vlan(ifaces)
continue
# These interfaces are printed by there parent, such as bridge
if iface.parent:
continue
if iface.bridge:
continue
iface.pr_name()
iface.pr_proto_eth()
iface.pr_proto_ipv4()
iface.pr_proto_ipv6()
def ietf_interfaces(json, name):
if not json or not json.get("ietf-interfaces:interfaces"):
print(f"Error, top level \"ietf-interfaces:interfaces\" missing")
sys.exit(1)
if not name:
return pr_interface_list(json)
iface = find_iface(json["ietf-interfaces:interfaces"]["interface"], name)
if not iface:
print(f"Interface {name} not found")
sys.exit(1)
return iface.pr_iface()
json = json.load(sys.stdin)
if args.module == "ietf-interfaces":
sys.exit(ietf_interfaces(json, args.name))
else:
print(f"Error, unknown module {args.module}")
sys.exit(1)
@@ -7,14 +7,9 @@ gen_interface()
cat <<EOF
,{
"name": "$1",
"type": "iana-if-type:ethernetCsmacd",
"type": "infix-if-type:ethernet",
"ietf-ip:ipv6": {
"enabled": true,
"forwarding": false,
"dup-addr-detect-transmits": 1,
"autoconf": {
"create-global-addresses": true
}
"enabled": true
}
}
EOF
@@ -23,7 +18,8 @@ EOF
phys_ifaces=$(ip -d -j link show | jq -r '
.[] |
select(.link_type == "ether") |
select(has("linkinfo") | not) |
select(.group != "internal") |
select(has("parentbus")) |
.ifname')
cat <<EOF
@@ -32,7 +28,7 @@ cat <<EOF
"interface": [
{
"name": "lo",
"type": "iana-if-type:softwareLoopback",
"type": "infix-if-type:loopback",
"ietf-ip:ipv4": {
"address": [{ "ip": "127.0.0.1", "prefix-length": 8 }]
},
+6 -2
View File
@@ -1,8 +1,9 @@
test-dir := $(BR2_EXTERNAL_INFIX_PATH)/test
INFIX_TESTS ?= $(test-dir)/case/all.yaml
INFIX_TESTS ?= $(test-dir)/case/all-unit.yaml $(test-dir)/case/all.yaml
test-env = $(test-dir)/env \
-f $(BINARIES_DIR)/infix-x86_64.img \
-p $(BINARIES_DIR)/infix-x86_64.pkg \
$(1) $(2)
test-env-qeneth = $(call test-env,-q $(test-dir)/virt/dual,$(1))
@@ -21,8 +22,11 @@ test-run: | ~/.infix-test-venv
$(call test-env-run,\
$(BR2_EXTERNAL_INFIX_PATH)/9pm/9pm.py \
$(INFIX_TESTS))
test-run-sh:
test-run-sh: | ~/.infix-test-venv
$(call test-env-run,/bin/sh)
test-run-play: | ~/.infix-test-venv
$(call test-env-run,$(test-dir)/case/meta/play.py)
~/.infix-test-venv:
$(test-dir)/docker/init-venv.sh $(test-dir)/docker/pip-requirements.txt
+1 -1
View File
@@ -56,7 +56,7 @@ submenu "net" "$log" {
set root=(initrd)
set slot="$1"
set append="console=ttyS0 root=/dev/ram ramdisk_size=65536 $2"
set append="console=ttyS0 root=/dev/ram0 ramdisk_size=65536 $2"
source /boot/grub/grub.cfg
else
if [ -z "$net_efinet0_dhcp_next_server" ]; then
+3 -2
View File
@@ -2,9 +2,10 @@
compatible=infix-x86_64
bootloader=grub
grubenv=/mnt/aux/grub/grubenv
statusfile=/var/lib/rauc/status
statusfile=/mnt/aux/rauc.status
mountprefix=/var/lib/rauc/mnt
bundle-formats=-plain
max-bundle-download-size=1073741824
[keyring]
directory=/etc/rauc/keys
@@ -18,5 +19,5 @@ device=/dev/disk/by-partlabel/secondary
bootname=secondary
[slot.net.0]
device=/dev/ram
device=/dev/ram0
bootname=net
+1 -3
View File
@@ -12,7 +12,7 @@ BR2_TARGET_GENERIC_ISSUE="Infix by KernelKit"
BR2_INIT_FINIT=y
BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y
BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt ${BR2_EXTERNAL_INFIX_PATH}/board/common/xattrs"
BR2_TARGET_GENERIC_GETTY_TERM="linux"
BR2_TARGET_GENERIC_GETTY_TERM="xterm"
BR2_SYSTEM_DHCP="eth0"
BR2_ENABLE_LOCALE_WHITELIST="C en_US en_CA"
BR2_GENERATE_LOCALE="en_US en_CA"
@@ -21,8 +21,6 @@ BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_INFIX_PATH}/board/common/rootfs ${BR2_EXTERNA
BR2_ROOTFS_POST_BUILD_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh ${BR2_EXTERNAL_INFIX_PATH}/board/classic/post-build.sh"
BR2_ROOTFS_POST_IMAGE_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-image.sh"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.19.17"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/aarch64/linux_defconfig"
BR2_LINUX_KERNEL_DTS_SUPPORT=y
+10 -4
View File
@@ -14,7 +14,7 @@ BR2_INIT_FINIT=y
BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt ${BR2_EXTERNAL_INFIX_PATH}/board/common/xattrs ${BR2_EXTERNAL_INFIX_PATH}/board/netconf/xattrs"
BR2_SYSTEM_BIN_SH_BASH=y
BR2_TARGET_GENERIC_GETTY_TERM="linux"
BR2_TARGET_GENERIC_GETTY_TERM="xterm"
BR2_SYSTEM_DHCP="eth0"
BR2_ENABLE_LOCALE_WHITELIST="C en_US en_CA"
BR2_GENERATE_LOCALE="en_US en_CA"
@@ -23,13 +23,12 @@ BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_INFIX_PATH}/board/common/rootfs ${BR2_EXTERNA
BR2_ROOTFS_POST_BUILD_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh ${BR2_EXTERNAL_INFIX_PATH}/board/netconf/post-build.sh"
BR2_ROOTFS_POST_IMAGE_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-image.sh"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.19.17"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/aarch64/linux_defconfig"
BR2_LINUX_KERNEL_DTS_SUPPORT=y
BR2_LINUX_KERNEL_INTREE_DTS_NAME="marvell/armada-3720-espressobin marvell/armada-3720-espressobin-emmc marvell/armada-3720-espressobin-v7 marvell/armada-3720-espressobin-v7-emmc marvell/armada-3720-espressobin-ultra marvell/cn9130-crb-A marvell/cn9130-crb-B sparx5_pcb135_emmc_no_psci"
BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="${BR2_EXTERNAL_INFIX_PATH}/board/aarch64/dts/microchip/sparx5_pcb135_emmc_no_psci.dts"
BR2_LINUX_KERNEL_DTB_KEEP_DIRNAME=y
BR2_LINUX_KERNEL_INSTALL_TARGET=y
BR2_PACKAGE_BUSYBOX_CONFIG="${BR2_EXTERNAL_INFIX_PATH}/board/common/busybox_defconfig"
BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y
@@ -64,6 +63,7 @@ BR2_PACKAGE_FPING=y
# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set
BR2_PACKAGE_IPTABLES=y
BR2_PACKAGE_IPTABLES_NFTABLES=y
BR2_PACKAGE_IPUTILS=y
BR2_PACKAGE_LLDPD=y
BR2_PACKAGE_NETCALC=y
BR2_PACKAGE_NETCAT_OPENBSD=y
@@ -85,11 +85,13 @@ BR2_PACKAGE_IRQBALANCE=y
BR2_PACKAGE_KMOD_TOOLS=y
BR2_PACKAGE_PWGEN=y
BR2_PACKAGE_RAUC=y
BR2_PACKAGE_RAUC_DBUS=y
BR2_PACKAGE_RAUC_GPT=y
BR2_PACKAGE_RAUC_NETWORK=y
BR2_PACKAGE_SYSKLOGD=y
BR2_PACKAGE_SYSKLOGD_LOGGER=y
BR2_PACKAGE_WATCHDOGD=y
BR2_PACKAGE_LESS=y
BR2_PACKAGE_MG=y
BR2_PACKAGE_NANO=y
BR2_TARGET_ROOTFS_SQUASHFS=y
@@ -103,6 +105,7 @@ BR2_PACKAGE_HOST_UBOOT_TOOLS=y
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
BR2_PACKAGE_CONFD=y
BR2_PACKAGE_STATD=y
BR2_PACKAGE_FACTORY=y
BR2_PACKAGE_FINIT_SULOGIN=y
BR2_PACKAGE_FINIT_PLUGIN_HOTPLUG=y
@@ -112,8 +115,11 @@ BR2_PACKAGE_FINIT_PLUGIN_MODPROBE=y
BR2_PACKAGE_FINIT_PLUGIN_RTC=y
BR2_PACKAGE_FINIT_PLUGIN_TTY=y
BR2_PACKAGE_FINIT_PLUGIN_URANDOM=y
BR2_PACKAGE_KLINFIX=y
BR2_PACKAGE_KLISH_PLUGIN_INFIX=y
BR2_PACKAGE_LOWDOWN=y
BR2_PACKAGE_NET=y
BR2_PACKAGE_PYTHON3=y
BR2_PACKAGE_PYTHON3_PYC_ONLY=y
BR2_PACKAGE_TETRIS=y
BR2_PACKAGE_QUERIERD=y
GNS3_APPLIANCE_RAM=512
+14
View File
@@ -11,6 +11,7 @@ BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_INFIX_PATH)/patches"
BR2_SSP_NONE=y
BR2_INIT_NONE=y
BR2_SYSTEM_BIN_SH_NONE=y
BR2_ROOTFS_POST_IMAGE_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-image.sh"
# BR2_PACKAGE_BUSYBOX is not set
# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set
# BR2_TARGET_ROOTFS_TAR is not set
@@ -23,7 +24,20 @@ BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_VARIABLES="USE_COHERENT_MEM=0"
BR2_TARGET_BINARIES_MARVELL=y
BR2_TARGET_MV_DDR_MARVELL=y
BR2_TARGET_UBOOT=y
BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
BR2_TARGET_UBOOT_CUSTOM_VERSION=y
BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2023.07.02"
BR2_TARGET_UBOOT_BOARD_DEFCONFIG="mvebu_crb_cn9130"
BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_INFIX_PATH)/board/common/uboot/extras.config $(BR2_EXTERNAL_INFIX_PATH)/board/aarch64/cn9130-crb/uboot/extras.config"
BR2_TARGET_UBOOT_FORMAT_DTB=y
BR2_TARGET_UBOOT_CUSTOM_DTS_PATH="$(BR2_EXTERNAL_INFIX_PATH)/board/aarch64/cn9130-crb/uboot/cn9130-crb-env.dtsi"
BR2_PACKAGE_HOST_GENIMAGE=y
BR2_PACKAGE_HOST_RAUC=y
BR2_PACKAGE_HOST_UBOOT_TOOLS=y
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
# SIGN_ENABLED is not set
DISK_IMAGE=y
DISK_IMAGE_BOOT_BIN=y
DISK_IMAGE_BOOT_DATA="${BINARIES_DIR}/flash-image.bin"
DISK_IMAGE_BOOT_OFFSET=0x00200000
+1 -3
View File
@@ -11,7 +11,7 @@ BR2_TARGET_GENERIC_ISSUE="Infix by KernelKit"
BR2_INIT_FINIT=y
BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y
BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt ${BR2_EXTERNAL_INFIX_PATH}/board/common/xattrs"
BR2_TARGET_GENERIC_GETTY_TERM="linux"
BR2_TARGET_GENERIC_GETTY_TERM="xterm"
BR2_SYSTEM_DHCP="eth0"
BR2_ENABLE_LOCALE_WHITELIST="C en_US en_CA"
BR2_GENERATE_LOCALE="en_US en_CA"
@@ -20,8 +20,6 @@ BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_INFIX_PATH}/board/common/rootfs ${BR2_EXTERNA
BR2_ROOTFS_POST_BUILD_SCRIPT="board/qemu/x86_64/post-build.sh ${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh ${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh ${BR2_EXTERNAL_INFIX_PATH}/board/classic/post-build.sh"
BR2_ROOTFS_POST_IMAGE_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-image.sh"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.19.17"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/x86_64/linux_defconfig"
BR2_LINUX_KERNEL_INSTALL_TARGET=y
+9 -4
View File
@@ -13,7 +13,7 @@ BR2_INIT_FINIT=y
BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt ${BR2_EXTERNAL_INFIX_PATH}/board/common/xattrs ${BR2_EXTERNAL_INFIX_PATH}/board/netconf/xattrs"
BR2_SYSTEM_BIN_SH_BASH=y
BR2_TARGET_GENERIC_GETTY_TERM="linux"
BR2_TARGET_GENERIC_GETTY_TERM="xterm"
BR2_SYSTEM_DHCP="eth0"
BR2_ENABLE_LOCALE_WHITELIST="C en_US en_CA"
BR2_GENERATE_LOCALE="en_US en_CA"
@@ -22,8 +22,6 @@ BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_INFIX_PATH}/board/common/rootfs ${BR2_EXTERNA
BR2_ROOTFS_POST_BUILD_SCRIPT="board/qemu/x86_64/post-build.sh ${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh ${BR2_EXTERNAL_INFIX_PATH}/board/netconf/post-build.sh"
BR2_ROOTFS_POST_IMAGE_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-image.sh"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.19.17"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/x86_64/linux_defconfig"
BR2_LINUX_KERNEL_INSTALL_TARGET=y
@@ -61,6 +59,7 @@ BR2_PACKAGE_FPING=y
# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set
BR2_PACKAGE_IPTABLES=y
BR2_PACKAGE_IPTABLES_NFTABLES=y
BR2_PACKAGE_IPUTILS=y
BR2_PACKAGE_LLDPD=y
BR2_PACKAGE_NETCALC=y
BR2_PACKAGE_NETCAT_OPENBSD=y
@@ -82,11 +81,13 @@ BR2_PACKAGE_IRQBALANCE=y
BR2_PACKAGE_KMOD_TOOLS=y
BR2_PACKAGE_PWGEN=y
BR2_PACKAGE_RAUC=y
BR2_PACKAGE_RAUC_DBUS=y
BR2_PACKAGE_RAUC_GPT=y
BR2_PACKAGE_RAUC_NETWORK=y
BR2_PACKAGE_SYSKLOGD=y
BR2_PACKAGE_SYSKLOGD_LOGGER=y
BR2_PACKAGE_WATCHDOGD=y
BR2_PACKAGE_LESS=y
BR2_PACKAGE_MG=y
BR2_PACKAGE_NANO=y
BR2_TARGET_ROOTFS_SQUASHFS=y
@@ -108,6 +109,7 @@ BR2_PACKAGE_HOST_UBOOT_TOOLS=y
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
BR2_PACKAGE_CONFD=y
BR2_PACKAGE_STATD=y
BR2_PACKAGE_FACTORY=y
BR2_PACKAGE_FINIT_SULOGIN=y
BR2_PACKAGE_FINIT_PLUGIN_HOTPLUG=y
@@ -117,8 +119,11 @@ BR2_PACKAGE_FINIT_PLUGIN_MODPROBE=y
BR2_PACKAGE_FINIT_PLUGIN_RTC=y
BR2_PACKAGE_FINIT_PLUGIN_TTY=y
BR2_PACKAGE_FINIT_PLUGIN_URANDOM=y
BR2_PACKAGE_KLINFIX=y
BR2_PACKAGE_KLISH_PLUGIN_INFIX=y
BR2_PACKAGE_LOWDOWN=y
BR2_PACKAGE_NET=y
BR2_PACKAGE_PYTHON3=y
BR2_PACKAGE_PYTHON3_PYC_ONLY=y
BR2_PACKAGE_TETRIS=y
BR2_PACKAGE_QUERIERD=y
GNS3_APPLIANCE_RAM=512
+3 -4
View File
@@ -13,7 +13,7 @@ BR2_INIT_FINIT=y
BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt ${BR2_EXTERNAL_INFIX_PATH}/board/common/xattrs ${BR2_EXTERNAL_INFIX_PATH}/board/netconf/xattrs"
BR2_SYSTEM_BIN_SH_BASH=y
BR2_TARGET_GENERIC_GETTY_TERM="linux"
BR2_TARGET_GENERIC_GETTY_TERM="xterm"
BR2_SYSTEM_DHCP="eth0"
BR2_ENABLE_LOCALE_WHITELIST="C en_US en_CA"
BR2_GENERATE_LOCALE="en_US en_CA"
@@ -22,8 +22,6 @@ BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_INFIX_PATH}/board/common/rootfs ${BR2_EXTERNA
BR2_ROOTFS_POST_BUILD_SCRIPT="board/qemu/x86_64/post-build.sh ${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh ${BR2_EXTERNAL_INFIX_PATH}/board/netconf/post-build.sh"
BR2_ROOTFS_POST_IMAGE_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-image.sh"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.19.17"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/x86_64/linux_defconfig"
BR2_LINUX_KERNEL_INSTALL_TARGET=y
@@ -59,6 +57,7 @@ BR2_PACKAGE_SYSKLOGD_LOGGER=y
BR2_TARGET_ROOTFS_SQUASHFS=y
# BR2_TARGET_ROOTFS_TAR is not set
BR2_PACKAGE_CONFD=y
BR2_PACKAGE_STATD=y
BR2_PACKAGE_FACTORY=y
BR2_PACKAGE_FINIT_SULOGIN=y
BR2_PACKAGE_FINIT_PLUGIN_HOTPLUG=y
@@ -68,7 +67,7 @@ BR2_PACKAGE_FINIT_PLUGIN_MODPROBE=y
BR2_PACKAGE_FINIT_PLUGIN_RTC=y
BR2_PACKAGE_FINIT_PLUGIN_TTY=y
BR2_PACKAGE_FINIT_PLUGIN_URANDOM=y
BR2_PACKAGE_KLINFIX=y
BR2_PACKAGE_KLISH_PLUGIN_INFIX=y
BR2_PACKAGE_NET=y
# SIGN_ENABLED is not set
# GNS3_APPLIANCE is not set
+224
View File
@@ -0,0 +1,224 @@
Change Log
==========
All notable changes to the project are documented in this file.
[v23.09.0][] - 2023-10-02
-------------------------
> **Note:** upcoming releases will lock the `root` user for system-only
> services. Instead an `admin` user will be the only default user with
> the CLI as its login shell. This user is already available, so please
> consider updating any guidelines or documentation you may have.
### YANG Status
- [ietf-system][]:
- [infix-system][]: MotD (Message of the Day) augment
- [infix-system][]: user login shell augment, default: `/bin/false`
- [infix-system-software][]: system-state/software augment for
remotely querying firmware version information
- [infix-system-software][]: firmware upgrade with `install-bundle` RPC
- [infix-system][]: timezone-name deviation, replaced with IANA timezones
- [infix-system][]: username deviation, clarifying Linux restrictions
- [infix-system][]: deviations for unsupported features, e.g. RADIUS
- [ietf-interfaces][]:
- [infix-interfaces][]: deviation for `if:phys-address` to allow read-write
- [ietf-ip][]: augmented with IPv4LL similar to standardized IPv6LL
- [infix-ip][]: deviations (`not-supported`) added for IPv4 and IPv6:
- `/if:interfaces/if:interface/ip:ipv4/ip:address/ip:subnet/ip:netmask`
- `/if:interfaces/if:interface/ip:ipv6/ip:address/ip:status`
- `/if:interfaces/if:interface/ip:ipv4/ip:mtu`
- `/if:interfaces/if:interface/ip:ipv6/ip:mtu`
- `/if:interfaces/if:interface/ip:ipv4/ip:neighbor`
- `/if:interfaces/if:interface/ip:ipv6/ip:neighbor`
- [ietf-if-vlan-encapsulation][]: Linux VLAN interfaces, e.g. `eth0.10`
- [infix-if-bridge][]: Linux bridge interfaces with native VLAN support
- [infix-if-veth][]: Linux VETH pairs
- [infix-if-type][]: deviation for interface types, limiting number
to supported types only. New identities are derived from default
IANA interface types, ensuring compatibility with other standard
models, e.g., `ieee802-ethernet-interface.yang`
- Configurable services:
- [ieee802-dot1ab-lldp][]: stripped down to an `enabled` setting
- [infix-services][]: support for enabling mDNS and SSDP discovery
[br2023.02.2]: https://git.busybox.net/buildroot/tag/?h=2023.02.2
[ieee802-dot1ab-lldp]: https://github.com/kernelkit/infix/tree/50a550b/src/confd/yang/ieee802-dot1ab-lldp%402022-03-15.yang
[ietf-system]: https://www.rfc-editor.org/rfc/rfc7317.html
[ietf-interfaces]: https://www.rfc-editor.org/rfc/rfc7223.html
[ietf-ip]: https://www.rfc-editor.org/rfc/rfc8344.html
[ietf-if-vlan-encapsulation]: https://www.ietf.org/id/draft-ietf-netmod-sub-intf-vlan-model-08.html
[infix-if-bridge]: https://github.com/kernelkit/infix/tree/784c175/src/confd/yang/infix-if-bridge%402023-08-21.yang
[infix-if-type]: https://github.com/kernelkit/infix/tree/784c175/src/confd/yang/infix-if-type%402023-08-21.yang
[infix-if-veth]: https://github.com/kernelkit/infix/tree/784c175/src/confd/yang/infix-if-veth%402023-06-05.yang
[infix-interfaces]: https://github.com/kernelkit/infix/tree/784c175/src/confd/yang/infix-interfaces%402023-09-19.yang
[infix-ip]: https://github.com/kernelkit/infix/tree/784c175/src/confd/yang/infix-ip%402023-09-14.yang
[infix-services]: https://github.com/kernelkit/infix/tree/784c175/src/confd/yang/infix-services%402023-08-22.yang
[infix-system]: https://github.com/kernelkit/infix/tree/784c175/src/confd/yang/infix-system%402023-08-15.yang
[infix-system-software]: https://github.com/kernelkit/infix/tree/784c175/src/confd/yang/infix-system-software%402023-06-27.yang
### Changes
- The following new NETCONF interface operational status have been added:
- admin-status
- IP address origin (dhcp, static, link-layer, random, other)
- bridge
- parent-interface
- basic statistics (`in_octets`, `out_octets`)
- Support for custom interface `phys-address` (MAC address)
- The CLI admin-exec command `show interfaces` now fully uses NETCONF
operational data to display both available interfaces and all of their
IP addresses. Displaying an individual interface will show more info.
- The CLI admin-exec command `password encrypt` now default to SHA512
### Fixes
- Fix #136: IPv6 autoconf `create-global-addresses true` does not bite
- Fix #138: Not possible to have static IP and DHCP at the same time
- Minor fixes and updates to documentation (faulty links, references)
- The `sync-fork.yml` workflow has finally been fixed.
[v23.08.0][] - 2023-08-31
-------------------------
> **Note:** upcoming releases will lock the `root` user for system-only
> services. Instead an `admin` user will be the only default user with
> the CLI as its login shell. This user is already available, so please
> consider updating any guidelines or documentation you may have.
### YANG Status
- [ietf-system][]:
- [infix-system][]: MotD (Message of the Day) augment
- [infix-system][]: user login shell augment, default: `/bin/false`
- [infix-system-software][]: system-state/software augment for
remotely querying firmware version information
- [infix-system-software][]: firmware upgrade with `install-bundle` RPC
- [infix-system][]: timezone-name deviation, replaced with IANA timezones
- [infix-system][]: username deviation, clarifying Linux restrictions
- [infix-system][]: deviations for unsupported features, e.g. RADIUS
- [ietf-interfaces][]:
- [ietf-ip][]: augmented with IPv4LL similar to standardized IPv6LL
- [ietf-if-vlan-encapsulation][]: Linux VLAN interfaces, e.g. `eth0.10`
- [infix-if-bridge][]: Linux bridge interfaces with native VLAN support
- [infix-if-veth][]: Linux VETH pairs
- [infix-if-type][]: deviation for interface types, limiting number
to supported types only. New identities are derived from default
IANA interface types, ensuring compatibility with other standard
models, e.g., `ieee802-ethernet-interface.yang`
- Configurable services:
- [ieee802-dot1ab-lldp][]: stripped down to an `enabled` setting
- [infix-services][]: support for enabling mDNS and SSDP discovery
[br2023.02.2]: https://git.busybox.net/buildroot/tag/?h=2023.02.2
[ieee802-dot1ab-lldp]: https://github.com/kernelkit/infix/tree/50a550b/src/confd/yang/ieee802-dot1ab-lldp%402022-03-15.yang
[ietf-system]: https://www.rfc-editor.org/rfc/rfc7317.html
[ietf-interfaces]: https://www.rfc-editor.org/rfc/rfc7223.html
[ietf-ip]: https://www.rfc-editor.org/rfc/rfc8344.html
[ietf-if-vlan-encapsulation]: https://www.ietf.org/id/draft-ietf-netmod-sub-intf-vlan-model-08.html
[infix-if-bridge]: https://github.com/kernelkit/infix/tree/50a550b/src/confd/yang/infix-if-bridge%402023-08-21.yang
[infix-if-veth]: https://github.com/kernelkit/infix/tree/50a550b/src/confd/yang/infix-if-veth%402023-06-05.yang
[infix-if-type]: https://github.com/kernelkit/infix/tree/50a550b/src/confd/yang/infix-if-type%402023-08-21.yang
[infix-services]: https://github.com/kernelkit/infix/tree/50a550b/src/confd/yang/infix-services%402023-08-22.yang
[infix-system]: https://github.com/kernelkit/infix/tree/50a550b/src/confd/yang/infix-system%402023-08-15.yang
[infix-system-software]: https://github.com/kernelkit/infix/tree/50a550b/src/confd/yang/infix-system-software%402023-06-27.yang
### Changes
- Bump Linux kernel: v5.19 to v6.1
- Updated board support for Microchip SparX-5i and Marvell CN9130 CRB
- New logo and significant updates to the documentation
- New NETCONF RPC `factory-default` to reset `running-config`
- Replaced limited BusyBox ping with iputils-ping
- Most system services are now disabled by default, support for enabling
LLDP, mDNS-SD, and SSDP using NETCONF, enabled in `factory-config`
- Firmware upgrade framework, based on [RAUC](https://rauc.io/), added
- Matching YANG model (see above) and an `install-bundle` RPC
- Currently supported upgrade protocols: HTTP/HTTPS, FTP, SCP
- Initial support for interface operational status, in ietf-interfaces
- Add support for setting user login shell: `bash`, `clish`, `false`
- Default login shell for new users: `false`
- Massive updates and fixes to the CLI (klish):
- Line editing now works as similar CLI:s from major vendors
- Hotkey fixes: Ctrl-D and Ctrl-Z now work as expected
- Prompt changed from JunOS style to be more similar to Bash
- Online help commands, both in admin-exec and configure context,
type `help` after entering the CLI to get started
- Improved help for configure context using YANG descriptions
- Support for reading and setting system "datetime" (RPC), an
optional `iso` keyword can be used when reading time to see the
format required when setting the time
- Support for showing interfaces status, using above operational data
- Support for showing bridge status: links, fdb, mdb, vlans
- Support for showing log files, including tailing with `follow`
- Support for `password generate` and `password encrypt`, highly
useful from configure context when creating new users: use the
`do password encrypt type sha256` to generate the hash
- Support show uptime, version, calling `netcalc`, ping, and tcpdump
### Fixes
- Fix #57: unneccesary lldpd restarts on configuration change
- Ensure mDNS advertises the correct hostname after hostname change
- Fix regression in enabling IPv4 ZeroConf address
- Loopback interface now shows `UP` operstate instead of `UNKNOWN`
- Fix adding user without password, i.e., login using SSH keys only
[v23.06.0][] - 2023-06-23
-------------------------
Midsummer release. The first official Infix release, based on [Buildroot
2023.02.2][br2023.02.2], with NETCONF support using the [sysrepo][] and
[netopeer2][].
Supported YANG models in addition to those used by sysrepo and netopeer:
- [ietf-system][]
- Everything except radius authentication and timezone-utc-offset
- Augmented with MotD (Message of the Day), Infix YANG model
- [ietf-interfaces][]
- [ietf-ip][] augmented with IPv4LL similar to standardized IPv6LL
- [ietf-if-vlan-encapsulation][], Linux VLAN interfaces, e.g. `eth0.10`
- Linux bridge interfaces with native VLAN support, Infix YANG model
- Linux VETH pairs, Infix YANG model
> **DISCLAIMER:** the [Infix YANG models for Linux][yang23.06], are
> still under heavy development. New revisions are expected which may
> not be backwards compatible. When upgrading to a new release, test on
> a GNS3 staging environment first, or start over from a factory reset.
[br2023.02.2]: https://git.busybox.net/buildroot/tag/?h=2023.02.2
[ietf-system]: https://www.rfc-editor.org/rfc/rfc7317.html
[ietf-interfaces]: https://www.rfc-editor.org/rfc/rfc7223.html
[ietf-ip]: https://www.rfc-editor.org/rfc/rfc8344.html
[ietf-if-vlan-encapsulation]: https://www.ietf.org/id/draft-ietf-netmod-sub-intf-vlan-model-08.html
[yang23.06]: https://github.com/kernelkit/infix/blob/aea74842e0475441d8df834f2dcd8cbc21fa253d/src/confd/yang/infix-interfaces%402023-06-05.yang
### Changes
- Bump sysrepo to v2.2.73
- Backport support for initializing factory-default data store with
default config data also for sysrepo internal modules.
- Add support for `sysrepocfg -Cfactory -d running`, for testing
- Bump netopeer2 to v2.1.62
- Bump libyang to v2.1.80
- Add klish, a CLI for sysrepo
- Add podman for container support, backported from upstream Buildroot
- Add conmon for container support, backported from upstream Buildroot
- Backport cni-plugins support for host-local and static plugins
### Fixes
- N/A
[buildroot]: https://buildroot.org/
[UNRELEASED]: https://github.com/kernelkit/infix/compare/v23.08.0...HEAD
[v23.09.0]: https://github.com/kernelkit/infix/compare/v23.08.0...v23.09.0
[v23.08.0]: https://github.com/kernelkit/infix/compare/v23.06.0...v23.08.0
[v23.06.0]: https://github.com/kernelkit/infix/compare/BASE...v23.06.0
[sysrepo]: https://www.sysrepo.org/
[netopeer2]: https://github.com/CESNET/netopeer2
-2
View File
@@ -1,2 +0,0 @@
Tobias Waldekranz <tobias@waldekranz.com>
Joachim Wiberg <troglobit@gmail.com>
+1
View File
@@ -0,0 +1 @@
variant.md
-221
View File
@@ -1,221 +0,0 @@
Infix System Configuration and RESTCONF API
===========================================
This document shows how to configure settings in the Infix CLI and how
to remotely inspect and change the configuration, as well as send RPC
commands, using the RESTCONF API.
Configuration
-------------
### NTP Client
How to configure two NTP servers with different options:
```
set system ntp
set system ntp server default
set system ntp server default udp address 1.2.3.4
set system ntp server default udp port 1231
set system ntp server default iburst true
set system ntp server default prefer true
set system ntp server foo
set system ntp server foo udp address 4.3.2.1
set system ntp server foo iburst false
commit
```
How to set up an actually working configuration when the system has a
valid IP address:
```
set system ntp server bar
set system ntp server bar udp address 192.168.122.1
commit
```
### Static IP Address
DHCP support not yet ready, but would be the default in a product
with NETCONF as the primary interface. This eliminates the need
to set up the device and give a works-out-of-the-box experience.
(Pending separate discussion on security aspects, of course).
```
set interface eth0
set interface eth0 type ianaift:ethernetCsmacd
set interface eth0 enabled true
set interface eth0 ipv4
set interface eth0 ipv4 enabled true
set interface eth0 ipv4 address 192.168.122.22
set interface eth0 ipv4 address 192.168.122.22 prefix-length 24
commit
```
Multiple IP addresses per interface will be in the final product.
```
> show configuration
ietf-system:system {
hostname flood;
}
ietf-interfaces:interfaces {
interface eth0 {
type ianaift:ethernetCsmacd;
enabled true;
ietf-ip:ipv4 {
enabled true;
address 192.168.122.22 {
prefix-length 24;
}
}
}
interface eth1 {
}
}
clixon-restconf:restconf {
enable true;
auth-type none;
fcgi-socket /run/clixon/restconf.sock;
}
```
**Note:** authentication disabled for demo purposes.
To save the configuration so that it persists across reboots:
```
copy running startup
```
RESTCONF API
------------
Get a subset of the configuration:
```
$ curl -X GET http://192.168.122.22/restconf/data/ietf-system:system
{
"ietf-system:system": {
"hostname": "foo"
}
}
```
```
$ curl -k -X GET http://192.168.122.22/restconf/data/ietf-system:system-state/
{
"ietf-system:system-state": {
"platform": {
"os-name": "Infix",
"os-release": "Buildroot 2023.02",
"os-version": "latest-227-g51c35e9-dirty",
"machine": "x86_64"
},
"clock": {
"current-datetime": "2023-03-23T22:15:53+01:00",
"boot-datetime": "2023-03-23T22:08:42+01:00"
}
}
}
```
List available RPC operations:
```
$ curl -X GET http://192.168.122.22/restconf/operations
{"operations": {
"ietf-system:set-current-datetime": [null],
"ietf-system:system-restart": [null],
"ietf-system:system-shutdown": [null],
"clixon-lib:debug": [null],
"clixon-lib:ping": [null],
"clixon-lib:stats": [null],
"clixon-lib:restart-plugin": [null],
"clixon-lib:process-control": [null],
"ietf-netconf-monitoring:get-schema": [null],
"ietf-netconf:get-config": [null],
"ietf-netconf:edit-config": [null],
"ietf-netconf:copy-config": [null],
"ietf-netconf:delete-config": [null],
"ietf-netconf:lock": [null],
"ietf-netconf:unlock": [null],
"ietf-netconf:get": [null],
"ietf-netconf:close-session": [null],
"ietf-netconf:kill-session": [null],
"ietf-netconf:commit": [null],
"ietf-netconf:discard-changes": [null],
"ietf-netconf:cancel-commit": [null],
"ietf-netconf:validate": [null],
"clixon-rfc5277:create-subscription": [null],
"ietf-netconf-nmda:get-data": [null],
"ietf-netconf-nmda:edit-data": [null]}
}
```
### Set hostname remotely
```
$ curl -is -H 'Content-Type: application/yang-data+json' -H 'Accept: application/yang-data+json' -X PATCH -d @hostname.cfg http://192.168.122.22/restconf/data/ietf-system:system
HTTP/1.1 204 No Content
Server: nginx/1.22.1
Date: Thu, 16 Mar 2023 13:53:53 GMT
Connection: keep-alive
```
The file `hostname.cfg` is in JSON format and looks like this:
```
{
"ietf-system:system": {
"hostname": "foo"
}
}
```
One-liner command without external `.cfg` file:
```
$ curl -is -H 'Content-Type: application/yang-data+json' -H 'Accept: application/yang-data+json' -X PATCH -d '{"ietf-system:system":{"hostname":"flood"}}' http://192.168.122.22/restconf/data/ietf-system:system
HTTP/1.1 204 No Content
Server: nginx/1.22.1
Date: Thu, 16 Mar 2023 14:1
```
Run this on a PC connected to the "switch" to see how the settings take effect immediately:
```
$ watch 'lldpcli show neighbors |grep -A20 tap0'
```
### RPCs
Perform system reboot remotely:
```
$ curl -k -X POST http://192.168.122.22/restconf/operations/ietf-system:system-restart
```
Enable debug remotely:
```
$ curl -Ssik -X POST -H "Content-Type: application/yang-data+json" http://192.168.122.22/restconf/operations/clixon-lib:debug -d '{"clixon-lib:input":{"level":1}}'
```
Set current date/time:
```
$ curl -Ssik -X POST -H "Content-Type: application/yang-data+json" http://192.168.122.22/restconf/operations/ietf-system:set-current-datetime -d '{"ietf-system:input":{"current-datetime":"2023-03-23T22:15:53+01:00"}}'
HTTP/1.1 204 No Content
Server: nginx/1.22.1
Date: Thu, 23 Mar 2023 22:46:52 GMT
Connection: keep-alive
```
$ curl -Ssik -X POST -H "Content-Type: application/yang-data+json" http://192.168.122.22/restconf/operations/ietf-system:set-current-datetime -d '{"ietf-system:input":{"current-datetime":"2023-03-23T20:15:53+05:00"}}'
View File
+22 -22
View File
@@ -243,26 +243,26 @@ following layout. The disk is expected to use the GPT partitioning
scheme. Partitions marked with an asterisk are optional.
.-----------.
| GPT Table |
:-----------:
| boot* |
:-----------:
| aux |
:-----------:
| |
| primary |
| |
:-----------:
| |
| secondary |
| |
:-----------:
| cfg |
:-----------:
| |
| var* |
| |
'-----------'
| GPT Table |
:-----------:
| boot* |
:-----------:
| aux |
:-----------:
| |
| primary |
| |
:-----------:
| |
| secondary |
| |
:-----------:
| cfg |
:-----------:
| |
| var* |
| |
'-----------'
### `boot` - Bootloader
@@ -295,8 +295,8 @@ Typical layout when using U-Boot bootloader:
/
├ primary.itbh
├ secondary.itbh
└ uboot.env
├ secondary.itbh
└ uboot.env
During boot, an ITB header along with the corresponding root
filesystem image are concatenated in memory, by U-Boot, to form a
-139
View File
@@ -1,139 +0,0 @@
CLI User Guide
==============
The Infix CLI is built on the [klish project][1], which is a framework
for implementing a CISCO, or Juniper Networs JunOS-like CLI on a UNIX
systems.
Currently, when the `admin` user logs in the default shell is Bash. To
access the CLI, type:
cli
Key commands available in any context are:
help
show
For each command it is also possible to press the `?` key and `TAB` to
get more help and suggestions for completion.
Admin Exec
----------
The top-level context after logging in and starting the CLI is the
admin-exec or "main" context. It is used for querying system status,
managing configuration files/profiles and doing advanced debugging.
Available commands can be seen by pressing `?` at the prompt:
```
root@infix-12-34-56:exec>
configure Create new candidate-config based on running-config
copy Copy
exit Exit
logout Alias for exit
shell Enter system shell
show Show
```
Configure Context
-----------------
Enter the configure context from admin-exec by typing `configure`
followed by Enter. Available commands, press `?` at the prompt:
```
root@infix-12-34-56:configure>
abort Abandon candidate
check Validate candidate
commit Commit current candidate to running-config
delete Delete configuration setting(s)
diff Summarize uncommitted changes
do Execute operational mode command
edit Descend to the specified configuration node
exit Ascend to the parent configuration node, or abort (from top)
leave Finalize candidate and apply to running-config
no Alias for delete
rollback Restore candidate to running-config
set Set configuration setting
show Show configuration
top Ascend to the configuration root
up Ascend to the parent configuration node
[edit]
```
The `edit` command lets you change to a sub-configure context, e.g.:
```
root@infix-12-34-56:configure> edit interfaces interface eth0
[edit interfaces interface eth0]
```
Notice the `[edit ...]` displayed, it shows your current location.
Use `up` to go back to the previous context.
```
root@infix-12-34-56:configure> up
[edit]
```
### Set IP Address on an Interface
```
root@infix-12-34-56:configure>
[edit]
root@infix-12-34-56:configure> edit interfaces interface eth0
[edit interfaces interface eth0]
root@infix-12-34-56:configure> set ipv4 address 192.168.2.200 prefix-length 24
[edit interfaces interface eth0]
```
From anywhere in configure context you can see the changes you have
made by typing `diff`:
```
root@infix-12-34-56:configure> diff
interfaces {
interface eth0 {
+ ipv4 {
+ address 192.168.2.200 {
+ prefix-length 24;
+ }
+ }
}
}
```
### Saving Changes
Apply the changes (from candidate to running):
```
root@infix-12-34-56:configure> leave
root@infix-12-34-56:exec> show running-config
interfaces {
interface eth0 {
type ethernetCsmacd;
ipv4 {
address 192.168.2.200 {
prefix-length 24;
}
}
}
```
Since we did not get any warnings we can save the running (RAM only)
configuration to startup, so the changes are made persistent across
reboots:
```
root@infix-12-34-56:exec> copy running-config startup-config
```
> **Note:** most (all) commands need to be spelled out, no short forms
> are allowed at the moment. Use the `TAB` key to make this easier.
[1]: https://src.libcode.org/pkun/klish
+1
View File
@@ -0,0 +1 @@
introduction.md
+106
View File
@@ -0,0 +1,106 @@
# Introduction
The command line interface (CLI, see-ell-i) is the traditional way of
interacting with single network equipment like switches and routers.
Today more advanced graphical NETCONF-based tools are available that
allows for managing entire fleets of installed equipment.
Nevertheless, when it comes to initial deployment and debugging, it
is very useful to know how to navigate and use the CLI. This very
short guide intends to help you with that.
## Key Concepts
The two modes in the CLI are the admin-exec and the configure context.
When logging in to the system, be it from console or SSH, you land in
admin-exec. Here you can inspect the system status and do operations
to debug networking issues, e.g. ping. You can also enter configure
context by typing: `configure`
The system has several datastores (or files):
- `factory-config` consists of a set of default configurations, some
static and others generated per-device, e.g., a unique hostname and
number of ports/interfaces. This file is generated at boot, if it
does not exist, i.e., only on first boot or after factory reset.
- `startup-config` is created from `factory-config` at boot if it does
not exist. It is loaded as the system configuration on each boot.
- `running-config` is what is actively running on the system. If no
changes have been made since the system booted, it is the same as
`startup-config`.
- `candidate-config` is created from `running-config` when entering the
configure context. Any changes made here can be discarded (`abort`,
`rollback`) or committed (`commit`, `leave`) to `running-config`.
To save configuration changes made to the `running-config` so the system
will use them consecutive reboots, use the `copy` command:
admin@infix-12-34-56:/> copy running-config startup-config
In *configure context* the following commands are available:
| **Command** | **Description** |
|-------------------|--------------------------------------------------------|
| `set foo bar val` | Set `bar` leaf node in `foo` subcontext to `val` |
| `no foo bar` | Clear/delete configuration made to `bar` in `foo` |
| `edit foo baz` | Enter `baz` sub-sub-context in `foo` subcontext |
| `abort` | Abort changes in configuration, return to admin-exec |
| `exit` | Exit one level sub-context, or abort from top-level |
| `leave` | Save changes to `running-config`, return to admin-exec |
| `show [foo]` | Show configured values (optionally in subcontext) |
| `diff [foo]` | Show uncommitted changes in candidate |
| `do command` | Call admin-exec command: `do show log` |
| `commit` | |
### Example Session
> Remember to use the `TAB` and `?` keys to speed up your navigation.
> See `help keybindings` for more tips!
In this example we enter configure context to add an IPv4 address to
interface `eth0`, then we apply the changes using the `leave` command.
We inspect the system status to ensure the change took effect. Then we
save the changes for the next reboot.
```
admin@infix-12-34-56:/> configure
admin@infix-12-34-56:/config/> edit interfaces interface eth0
admin@infix-12-34-56:/config/interfaces/interface/eth0/> set ipv4 <TAB>
address autoconf bind-ni-name enabled
forwarding mtu neighbor
admin@infix-12-34-56:/config/interfaces/interface/eth0/> set ipv4 address 192.168.2.200 prefix-length 24
admin@infix-12-34-56:/config/interfaces/interface/eth0/> show
type ethernetCsmacd;
ipv4 address 192.168.2.200 prefix-length 24;
ipv6 enabled true;
admin@infix-12-34-56:/config/interfaces/interface/eth0/> diff
interfaces {
interface eth0 {
+ ipv4 {
+ address 192.168.2.200 {
+ prefix-length 24;
+ }
+ }
}
}
admin@infix-12-34-56:/config/interfaces/interface/eth0/> leave
admin@infix-12-34-56:/> show interfaces brief
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
eth0 UP 52:54:00:12:34:56 <BROADCAST,MULTICAST,UP,LOWER_UP>
admin@infix-12-34-56:/> show ip brief
lo UNKNOWN 127.0.0.1/8 ::1/128
eth0 UP 192.168.2.200/24 fe80::5054:ff:fe12:3456/64
admin@infix-12-34-56:/> copy running-config startup-config
```
One of the ideas behind a separate running and startup configuration is
to be able to verify a configuration change. In case of an inadvertent
change that, e.g., breaks networking, it is trivial to revert back by:
```
admin@infix-12-34-56:/> copy startup-config running-config
```
Or restarting the device.
+48
View File
@@ -0,0 +1,48 @@
# Keybindings
Writing CLI commands by hand is very tedious. To make things easier the
CLI has several keybindings, most significant first:
| **Key** | **Cmd/Key** | **Description** |
|---------|----------------|--------------------------------------------------|
| TAB | | Complete current command, see below for example |
| ? | | Show available commands, or arguments, with help |
| Ctrl-c | | Cancel everything on current line |
| Ctrl-d | `abort`/`exit` | Delete character, or abort/exit on empty line |
| Ctrl-z | `leave` | Leave and activate changes in configure context |
| Ctrl-f | Right arrow | Move cursor forward one character |
| Ctrl-b | Left arrow | Move cursor back one character |
| Meta-f | Ctrl-Right | Move cursor forward one word |
| Meta-b | Ctrl-Left | Move cursor back one word |
| Ctrl-e | End | Move cursor to end of line |
| Ctrl-a | Home | Move cursor to beginning of line |
| Ctrl-k | | Kill (cut) text from cursor to end of line |
| Ctrl-u | | Delete (cut) entire line |
| Ctrl-y | | Yank (paste) from kill buffer to cursor |
| Meta-. | | Yank (paste) last argument from previous line |
| Ctrl-w | Meta-Backspace | Delete (cut) word to the left |
| | Meta-Delete | Delete (cut) word to the right |
| Ctrl-l | | Clear screen and refresh current line |
| Ctrl-p | Up arrow | History, previous command |
| Ctrl-n | Down arrow | History, next command |
| Ctrl-r | | History, reversed interactive search (i-search) |
> **Note:** the Meta key is called Alt on most modern keyboards. If you
> have neither, first tap the Esc key instead of holding down Alt/Meta.
## Examples
Complete a word. Start by typing a few characters, then tap the TAB key
on your keyboard:
conf<TAB> --> configure
See possible arguments, with brief help text, to a command:
show ?
bridge Show bridge (ports/fdb/mdb/vlans)
datetime Show current date and time, default RFC2822 format
...
Type the command, then tap the `?` key.
+25
View File
@@ -0,0 +1,25 @@
# Quick Overview
The question mark `?` key along with the `Tab` key are your best friends
in the command line interface. They provide context help and completion
of commands you input. See the table below for a handful of examples.
| **Command** | **Description** |
|---------------------|----------------------------------------------------|
| `help` | Overview of topics/settings in the current context |
| `?` | Lists commands + brief help in the current context |
| `<Tab>` | Lists commands available in the current context |
| `partial<Tab>` | Completes a partial command name |
| `command <Tab>` | Lists keywords/arguments associated with a command |
| `command keyword ?` | Lists arguments associated with a keyword + help |
Explore the following topics for more information. Note, the
keybindings are really useful to learn!
| **Command** | **Description** |
|---------------------|--------------------------------------------|
| `help introduction` | An introduction to the CLI |
| `help keybindings` | Lists keybindings and other helpful tricks |
| `help tutorial` | The CLI User Guide |
+296
View File
@@ -0,0 +1,296 @@
User Guide
==========
The command line interface (CLI, see-el-i) is built on the open source
component [klish][1], which implements a CISCO like, or Juniper Networks
JunOS-like CLI on a UNIX system.
New users always get the CLI as the default "shell" when logging in, but
the default `admin` user logs in to the Bash. To access the CLI, type:
cli
Key commands available in any context are:
help
show
For each command it also possible to press the `?` key and `TAB` to get
more help and suggestions for completion.
> **Note:** for the sake of brevity, the hostname in the following
> examples has been shortened to `host`. The default name is composed
> from a product specific string followed by the last three octets of
> the system base MAC address, e.g., `infix-12-34-56`. An example of
> how to change the hostname is included below.
Admin Exec
----------
The top-level context after logging in and starting the CLI is the
admin-exec or "main" context. It is used for querying system status,
managing configuration files/profiles and doing advanced debugging.
Available commands can be seen by pressing `?` at the prompt:
```
admin@host:/>
configure Create new candidate-config based on running-config
copy Copy
exit Exit
logout Alias for exit
shell Enter system shell
show Show
```
Configure Context
-----------------
Enter the configure context from admin-exec by typing `configure`
followed by Enter. Available commands, press `?` at the prompt:
```
admin@host:/> configure
admin@host:/config/>
abort Abandon candidate
check Validate candidate
commit Commit current candidate to running-config
delete Delete configuration setting(s)
diff Summarize uncommitted changes
do Execute operational mode command
edit Descend to the specified configuration node
exit Ascend to the parent configuration node, or abort (from top)
leave Finalize candidate and apply to running-config
no Alias for delete
rollback Restore candidate to running-config
set Set configuration setting
show Show configuration
top Ascend to the configuration root
up Ascend to the parent configuration node
```
The `edit` command lets you change to a sub-configure context, e.g.:
```
admin@host:/config/> edit interfaces interface eth0
admin@host:/config/interfaces/interface/eth0/>
```
Use `up` to go up one level.
```
admin@host:/config/interfaces/interface/eth0/> up
admin@host:/config/interfaces/>
```
> **Note:** the tree structure in the configure context is automatically
> generated from the system's supported NETCONF YANG models, which may
> vary between products. However, the `ietf-interfaces.yang` and
> `ietf-ip.yang` models, for instance, that provide basic networking
> support are common to all systems.
### Set IP Address on an Interface
```
admin@host:/config/> edit interfaces interface eth0
admin@host:/config/interfaces/interface/eth0/>
admin@host:/config/interfaces/interface/eth0/> set ipv4 address 192.168.2.200 prefix-length 24
```
From anywhere in configure context you can see the changes you have
made by typing `diff`:
```
admin@host:/config/interfaces/interface/eth0/> diff
interfaces {
interface eth0 {
+ ipv4 {
+ address 192.168.2.200 {
+ prefix-length 24;
+ }
+ }
}
}
```
### Saving Changes
Apply the changes (from candidate to `running-config`):
```
admin@host:/config/interfaces/> leave
admin@host:/> show running-config
...
interfaces {
interface eth0 {
type ethernetCsmacd;
ipv4 {
address 192.168.2.200 {
prefix-length 24;
}
}
}
...
```
Since we did not get any warnings we can save the running (RAM only)
configuration to startup, so the changes are made persistent across
reboots:
```
admin@host:/> copy running-config startup-config
```
The `startup-config` can also be inspected with the `show` command to
verify the changes are saved.
> **Note:** most (all) commands need to be spelled out, no short forms
> are allowed at the moment. Use the `TAB` key to make this easier.
### Changing Hostname
Settings like hostname are located in the `ietf-system.yang` model.
Here is how it can be set.
```
admin@host:/config/> edit system
admin@host:/config/system/> set hostname example
admin@host:/config/system/> leave
admin@example:/>
```
Notice how the hostname in the prompt does not change until the change
is committed.
> **Note:** critical services like syslog, mDNS, LLDP, and similar that
> advertise the hostname, are restarted when the hostname is changed.
### Changing Password
User management, including passwords, is also a part of `ietf-system`.
```
admin@host:/config/> edit system authentication
admin@host:/config/system/authentication/> do password encrypt
Password: ******
$1$oVHGR0AP$6Pad1Pm8jPwPsan5WHULS1
admin@host:/config/system/authentication/> set user admin password $1$oVHGR0AP$6Pad1Pm8jPwPsan5WHULS1
admin@host:/config/system/> leave
```
The call to `do password encrypt` brings up the helpful admin-exec
command to hash, and optionally salt, your password. This encrypted
string is what goes into the system configuration.
> **Tip:** if you are having trouble thinking of a password, there is
> also `do password generate`, which generates random but readable
> strings using the UNIX command `pwgen`.
### Creating a VETH Pair
The following example creates a `veth0a <--> veth0b` virtual Ethernet
pair which is useful for connecting, e.g., a container to the physical
world. Here we also add an IPv4 address to one end of the pair.
```
admin@host:/config/> edit interfaces interface veth0a
admin@host:/config/interfaces/interface/veth0a/> set veth peer veth0b
admin@host:/config/interfaces/interface/veth0a/> set ipv4 address 192.168.0.1 prefix-length 24
admin@host:/config/interfaces/interface/veth0a/> up
admin@host:/config/interfaces/> diff
interfaces {
+ interface veth0a {
+ type veth;
+ ipv4 {
+ address 192.168.0.1 {
+ prefix-length 24;
+ }
+ }
+ veth {
+ peer veth0b;
+ }
+ }
+ interface veth0b {
+ type veth;
+ veth {
+ peer veth0a;
+ }
+ }
}
admin@host:/config/interfaces/> leave
```
See the bridging example below for more.
> **Note:** in the CLI you do not have to create the `veth0b` interface.
> The system _infers_ this for you. When setting up a VETH pair using
> NETCONF, however, you must include the `veth0b` interface.
### Creating a Bridge
Building on the previous example, we now create a non-VLAN filtering
bridge (`br0`) that forwards any, normally link-local, LLDP traffic
between both its bridge ports: `eth0` and `vet0b`.
```
admin@host:/> configure
admin@host:/config/> edit interfaces interface br0
admin@host:/config/interfaces/interface/br0/> set bridge ieee-group-forward lldp
admin@host:/config/interfaces/interface/br0/> up
admin@host:/config/interfaces/> set interface eth0 bridge-port bridge br0
admin@host:/config/interfaces/> set interface veth0b bridge-port bridge br0
admin@host:/config/interfaces/> diff
interfaces {
+ interface br0 {
+ type bridge;
+ bridge {
+ ieee-group-forward lldp;
+ }
+ }
interface eth0 {
+ bridge-port {
+ bridge br0;
+ }
}
+ interface veth0a {
+ type veth;
+ ipv4 {
+ address 192.168.0.1 {
+ prefix-length 24;
+ }
+ }
+ veth {
+ peer veth0b;
+ }
+ }
+ interface veth0b {
+ type veth;
+ veth {
+ peer veth0a;
+ }
+ bridge-port {
+ bridge br0;
+ }
+ }
}
```
Both a physical port `eth0` and a virtual port `veth0b` (bridge side of
the VETH pair from the previous example) are now bridged. Any traffic
ingressing one port will egress the other. Only reserved IEEE multicast
is filtered, except LLDP frames as shown above.
> **Note:** the bridge can be named anything, provided the interface
> name is not already taken. However, for any name outside the pattern
> `br[0-9]+`, you have to set the interface type manually to `bridge`.
[1]: https://src.libcode.org/pkun/klish
+234 -41
View File
@@ -1,50 +1,52 @@
Containers in Infix
===================
The default builds of Infix do not enable any container support. This
because it is not a common customer feature, and it extends build times
due to bringing in a build-time dependency on Go.
* [Introduction](#introduction)
* [Docker Containers with Podman](#docker-containers-with-podman)
* [Multiple Networks](#multiple-networks)
* [Hybrid Mode](#hybrid-mode)
* [Enabling Containers](#enabling-containers)
* [Debugging Containers](#debugging-containers)
However,customer specific builds may have it, and you can also roll your
own based on any of the available `defconfigs`. For example:
cd infix/
make x86_64_defconfig
Introduction
------------
Default builds of Infix do not enable any container support. See below
section, [Enabling Container Support](#enabling-container-support), for
details on how to enable it using Podman.
Networking in containers is provided by both Infix and the Container
Network Interface ([CNI](https://www.cni.dev/)) that Podman supports.
> A convenience alias `docker=podman` is available in Infix, remember,
> not all features or syntax of docker is available in podman.
Docker Containers with Podman
-----------------------------
Run menuconfig, search for `podman`, enable that and build:
make menuconfig
...
make
Enabling [podman][] select `crun`, `conmon`, and all other dependencies.
The build will take a while, but eventually you can:
make run
> A convenience alias `docker=podman` is available, but remember, not
> all features or syntax of docker is available in podman.
Test it out with an example:
We assume you've booted into Infix and start with a familiar example.
This downloads the `hello-world` example container image and runs it:
podman run -it --rm docker://hello-world
or a little web server:
We can also set up a port forward to a little web server:
podman run -d --rm -p 80:80 docker://nginx:alpine
In detached (`-d`) state you can check the status using `podman ps` or
In detached (`-d`) state you can check the status using `podman ps` and
try to connect to the web server:
curl http://localhost
or
or connect to port 80 of your running Infix system with a browser. See
the following sections for how to add more interfaces and start/stop the
container at boot/reboot.
lynx http://localhost
> To add your own content to web server, place the HTML files in, e.g.,
> `/cfg/www/*.html` and add `-v /cfg/www:/usr/share/nginx/html:ro` to
> the command line (above). <https://hub.docker.com/_/nginx/>
### Multiple Networks
@@ -53,15 +55,16 @@ It is also possible to start a container with multiple networks. The
approach shown here uses CNI profiles, which means the interfaces names
inside the container will always be: `eth0`, `eth1`, etc.
Pending VETH support in Infix/NETCONF, the following example sets up a
VETH pair, then creates a CNI profile, and finally starts a container
with two profiles, the default podman bridge and the VETH profile:
A common setup is to use a VETH pair, with one end in the container and
the other end routed, or bridged, to the rest of the world. The Infix
[CLI Guide](cli/introduction.md) provides examples of both. In either case you need
to create a matching CNI profile for one end of the VETH pair before
starting the container, here we use two network profiles, the default
podman bridge and the VETH profile:
ip link add local1 type veth peer local1_peer
ip link set local1 up
ip addr add 192.168.0.1/24 dev local1
cni create host net1 local1_peer 192.168.0.42/24
podman run -d --rm --net=podman,net1 --privileged docker://troglobit/buildroot:latest
cni create host net1 veth0a 192.168.0.42/24
podman run -d --rm --net=podman,net1 --entrypoint "/linuxrc" \
--privileged docker://troglobit/buildroot:latest
The first profile (`podman`) is a the default bridged profile. When a
container is started with that (default behavior), podman dynamically
@@ -79,22 +82,93 @@ used to hand over control of physical ports to a container.
> might not be what you want for a production system. For that at least
> SECCOMP is recommended, which is out of scope for this tutorial.
### Real Example
### NETCONF Build
To be able to preserve state in containers between reboots we need a
writable layer, this is done with `podman create`, after which we can
use `podman start`. We build on the previous example:
If you've followed this tutorial then you now have a NETCONF based Infix
system running. To run containers on it you need to leverage the Hybrid
mode, described in the README but also repeated below.
cni create host net1 veth0a 192.168.0.42/24
podman create --name system --conmon-pidfile=/run/pod:system.pid \
--restart=no --systemd=false --tz=local --privileged \
--net=podman,net1 --entrypoint "/linuxrc" -p 222:22 \
docker://troglobit/buildroot:latest
Here we map the host port 222 to the SSH port of the container, but one
can just as easily map the host's port 22 (SSH). Just make sure to
first disable the host's SSH service.
> **Note:** the new options used here are required for enabling
> monitoring and automate start/stop of containers at boot/reboot.
This creates the named container `system` which we can now start:
podman start system
and stop:
podman stop system
For this particular image[^1] we need to modify its defaults a bit,
because it is set up to run a DHCP client on the first Ethernet
interface, which in our case is the `podman` default CNI bridge. In
fact, we don't want the container to set up any networking since that is
handled by Infix and podman.
root@infix-12-34-56:~$ podman start system
root@infix-12-34-56:~$ podman exec -it system sh
/ # rm -rf /etc/network/interfaces
/ # exit
root@infix-12-34-56:~$ podman stop system
The change is now saved in the writable layer and the next time the
container is started it will look like this:
root@infix-12-34-56:~$ podman start system
root@infix-12-34-56:~$ podman exec -it system sh
/ # ifconfig
eth0 Link encap:Ethernet HWaddr A2:32:4C:2B:5E:51
inet addr:10.88.0.11 Bcast:10.88.255.255 Mask:255.255.0.0
inet6 addr: fe80::a032:4cff:fe2b:5e51/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:204 errors:0 dropped:107 overruns:0 frame:0
TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:48240 (47.1 KiB) TX bytes:1102 (1.0 KiB)
eth1 Link encap:Ethernet HWaddr 56:B5:4E:D1:9C:E5
inet addr:192.168.0.42 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::54b5:4eff:fed1:9ce5/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:274 errors:0 dropped:213 overruns:0 frame:0
TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:60926 (59.4 KiB) TX bytes:1377 (1.3 KiB)
Automating start/stop at boot/reboot is documented in the next section.
[^1]: A common task one has to do for many other standard images, e.g.,
Alpine Linux and BusyBox available on Docker Hub.
### Hybrid Mode
Since container setup and configuration is not modeled in YANG yet, we
use the Infix *Hybrid mode*, described in [Infix Variants](variant.md).
To start containers in *Hybrid Mode*, provided the images have been
downloaded with `podman pull` first):
downloaded with `podman pull docker://troglobit/buildroot:latest` and
a container created (above):
```
root@infix:/cfg/start.d$ cat <<EOF >20-enable-container.sh
#!/bin/sh
podman-service -e -d "Nginx container" -p "-p 80:80" nginx:alpine
exit 0
# Remember to create the veth0a <--> vet0b pair in the CLI first!
cni create host net1 veth0a 192.168.0.42/24
cat <<EOF > /etc/finit.d/available/pod:system.conf
service name:pod :system pid:!/run/pod:system.pid podman --syslog start system -- System container
EOF
initctl enable pod:system
exit 0
root@infix:/cfg/start.d$ chmod +x 20-enable-container.sh
```
@@ -106,4 +180,123 @@ rebooting, run the script and call `initctl reload`.
> need to either save them and restore in the script above, or recreate
> them on every boot.
Enabling Container Support
--------------------------
Container support is not enabled by default because it is not a common
customer feature, it also prolongs build times a lot due to bringing in
a build-time dependency on Go.
However, customer specific builds may have it, and you can also roll
your own based on any of the available `defconfigs`. For example:
cd infix/
make x86_64_defconfig
Run menuconfig, search for `podman` using `/`, enable it and build:
make menuconfig
...
make
Enabling [podman][] select `crun`, `conmon`, and all other dependencies.
The build will take a while, but eventually you can:
make run
Debugging Containers
--------------------
If the host system is not powered down or rebooted properly, containers
may not start up as they should on the following boot. Below is a very
common problem and solution shown.
```
root@infix-12-34-56:~$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@infix-12-34-56:~$ grep nginx /var/log/syslog
Jun 25 10:15:48 infix-12-34-56 finit[1]: Service pod:nginx[2376] died, restarting in 5000 msec (10/10)
Jun 25 10:15:48 infix-12-34-56 finit[1]: Starting pod:nginx[2408]
Jun 25 10:15:53 infix-12-34-56 finit[1]: Service pod:nginx keeps crashing, not restarting.
```
If this the system is isolated from remote network access, start by
verifying the image is downloaded:
```
root@infix-12-34-56:/cfg/start.d$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/nginx alpine 4937520ae206 10 days ago 43.2 MB
docker.io/troglobit/buildroot latest 68faf6b20f1a 6 weeks ago 41.4 MB
```
OK, let's see what the `podman-service` step (above) created:
```
root@infix-12-34-56:/cfg/start.d$ initctl show pod-nginx.conf
service name:pod :nginx podman run --name nginx --rm -p 80:80 nginx:alpine -- Nginx container
```
Try starting the container manually. Remember to add the `-d` flag to
emulate detached/background operation:
```
root@infix-12-34-56:/cfg/start.d$ podman run --name nginx --rm -d -p 8080:80 nginx:alpine
Error: creating container storage: the container name "nginx" is already in use by 9c73bd8d505b1585d241595bfadede361b87f6c1be9a5656253b5a4d73da57e0. You have to remove that container to be able to reuse that name: that name is already in use
```
Aha, a lingering image with the same name! Where is it?
```
root@infix-12-34-56:/cfg/start.d$ podman ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f3386ae9517f docker.io/troglobit/buildroot:latest About an hour ago Exited (0) About an hour ago ecstatic_panini
bf0c6178ea26 docker.io/troglobit/buildroot:latest About an hour ago Exited (0) About an hour ago determined_brown
385155f479c0 docker.io/troglobit/buildroot:latest About an hour ago Exited (0) About an hour ago vibrant_engelbart
99a1b3319d9e docker.io/troglobit/buildroot:latest About an hour ago Exited (0) About an hour ago dreamy_tesla
9c73bd8d505b docker.io/library/nginx:alpine nginx -g daemon o... 11 minutes ago Created 0.0.0.0:80->80/tcp nginx
8a5290504ebc docker.io/troglobit/buildroot:latest 10 minutes ago Created mystifying_liskov
```
Oh, we have two lingering containers that were created but did not stop
correctly. Let's remove them:
```
root@infix-12-34-56:/cfg/start.d$ docker rm -f 9c73bd8d505b
9c73bd8d505b
root@infix-12-34-56:/cfg/start.d$ docker rm -f 8a5290504ebc
8a5290504ebc
```
Now we can manually restart the (supervised) container:
```
root@infix-12-34-56:/cfg/start.d$ initctl restart pod:nginx
root@infix-12-34-56:/cfg/start.d$ initctl status pod:nginx
Status : running
Identity : pod:nginx
Description : Nginx container
Origin : /etc/finit.d/enabled/pod-nginx.conf
Command : podman run --name nginx --rm -p 80:80 nginx:alpine
PID file : none
PID : 2669
User : root
Group : root
Uptime : 15 sec
Restarts : 11 (0/10)
Runlevels : [---234-----]
Memory : 63.8M
CGroup : /system/pod-nginx cpu 0 [100, max] mem [0, max]
├─ 2669 podman run --name nginx --rm -p 80:80 nginx:alpine
└─ 2816 conmon --api-version 1 -c 44d24aa7e98b67ff811596984462b902af3b09a04b4f9bef86e11d246b8cc2ff -u 44d24aa7e98b67ff8
Jun 25 10:15:48 infix-12-34-56 finit[1]: Service pod:nginx[2376] died, restarting in 5000 msec (10/10)
Jun 25 10:15:48 infix-12-34-56 finit[1]: Starting pod:nginx[2408]
Jun 25 10:15:53 infix-12-34-56 finit[1]: Service pod:nginx keeps crashing, not restarting.
Jun 25 10:47:55 infix-12-34-56 finit[1]: Starting pod:nginx[2669]
```
[podman]: https://podman.io
+150
View File
@@ -0,0 +1,150 @@
Developer's Guide
=================
Cloning
-------
When [pre-built releases][0] are not enough, for instance when you want
to add or modify some Open Source components, you can clone the Infix
tree to your PC:
```bash
$ mkdir ~/Projects; cd ~/Projects
$ git clone https://github.com/kernelkit/infix.git
$ cd infix/
$ git submodule update --init
```
> Please see the [Contributing](#contributing) section, below, for
> details on how to fork and clone when contributing to Infix.
### Customer Builds
Customer builds add product specific device trees, more OSS packages,
e.g., Frr and podman, and sometimes integrates proprietary software.
What's *important to remember*, however, is that they are all made by
setting up Infix as a GIT submodule, similar to how Infix set up a GIT
submodule for Buildroot.
So, in addition to using the customer's specific defconfig(s), one must
also make sure to update *all submodules*, otherwise you will likely end
up with a broken build.
```bash
$ ...
$ git submodule update --init --recursive
~~~~~~~~~~~
```
Other caveats should be documented in the customer specific trees.
Building
--------
Buildroot is almost stand-alone, it needs a few locally installed tools
to bootstrap itself. The most common ones are usually part of the base
install of the OS, but specific ones for building need the following.
The instructions here are for Debian/Ubuntu based systems (YMMV):
```bash
$ sudo apt install bc binutils build-essential bzip2 cpio \
diffutils file findutils git gzip \
libncurses-dev libssl-dev perl patch \
python rsync sed tar unzip wget
```
> For details, see the Getting Started and System Requirements sections
> of the [excellent manual][1].
To build an Infix image; select the target and then make:
make x86_64_defconfig
make
Online help is available:
make help
To see available defconfigs for supported targets, use:
make list-defconfigs
Development
-----------
When changing a package, locally kept sources, or when using `local.mk`,
you only want to rebuild the parts you have modified:
make foo-rebuild
or
make foo-reconfigure
or, when nothing seems to bite:
make foo-dirclean foo-rebuild
As shown here, you can combine multiple build targets and steps in one
go, like this:
make foo-rebuild bar-rebuild all run
This rebuilds (and installs) `foo` and `bar`, the `all` target calls
on Buildroot to finalize the target filesystem and generate the images.
The final `run` argument is explained below.
Testing
-------
Manual testing can be done using Qemu by calling <kbd>make run</kbd>,
see also [Infix in Virtual Environments](virtual.md).
The Infix automated test suite is built around Qemu and [Qeneth][2], see:
* [Testing](testing.md)
* [Docker Image](../test/docker/README.md)
Contributing
------------
Infix is built from many parts, when contributing you need to set up
your own fork, create a local branch for your change, push to your fork,
and then use GitHub to create a *Pull Reqeuest*.
For this to work as painlessly as possible:
1. Fork Infix to your own user or organization[^1]
2. Fork all the Infix submodules, e.g., `buildroot` to your own user
or organization as well
3. Clone your fork of Infix to your laptop/workstation
If you use a GitHub organization you get the added benefit of having
local peer reviews of changes before making a pull request to the
upstream Infix repository.
```bash
$ cd ~/Projects
$ git clone https://github.com/YOUR_USER_NAME/infix.git
$ cd infix/
$ git submodule update --init
```
> **Note:** when updating/synchronizing with upstream Infix changes you
> may have to synchronize your forks as well. GitHub have a `Sync fork`
> button in the GUI for your fork for this purpose.
[^1]: Organizations should make sure to lock the `main` (or `master`)
branch of their clones to ensure members do not accidentally merge
changes there. Keeping these branches in sync with upstream Infix
is highly recommended as a baseline and reference. For integration
of local changes another company-specific branch can be used instead.
[0]: https://github.com/kernelkit/infix/releases
[1]: https://buildroot.org/downloads/manual/manual.html
[2]: https://github.com/wkz/qeneth
-55
View File
@@ -1,55 +0,0 @@
Infix Goals
===========
The founding ideas that drive Infix are:
- Use Buildroot, it is:
- High quality, track their LTS releases whenever possible
- Well maintained and responsive community
- Easy to use (c.f. Yocto or roll-your-own)
- Well curated Open Source components
- Take active part in Buildroot to secure investment in key components
- Extend with other Open Source components for system monitoring,
networking, etc. With the intent of upstreaming them to become parts
of Buildroot proper
- Rely on standards, i.e., use NETCONF and YANG
- When standards are not enough create models that fit well with Linux
and chosen Open Source components
- Keep as much as possible Open Source, no need to maintain stuff that
is not core business
- Secure boot by default
- Use RAUC for upgrades, it works
- Serve as a stand-alone(!) base for other projects that use Infix as
their Buildroot external -- this makes Infix a great layer for where
to publish used Open Source components and patches used in customer
projects
**Note:** projects derived from Infix (as a Buildroot external) will be
able to seamlessly extend the CLI with other models.
Short Term
----------
- Integrate Clixon and some well-chosen IETF/IEEE YANG models
(ietf-system, ietf-interfaces/ip)
- Get the (from YANG) automatically generated CLI working similar to
Cisco, HP ProCurve, and other well-known command line interfaces,
with a focus on usability
- First baseline release, from Buildroot 2023.02 (LTS) -> v23.6.0
Medium Term
-----------
- First Web interface built on top of RESTCONF API
- Static routing, firewalling, and other advanced YANG models
- OSPF YANG model integrated with Frr as backend
- Second release -> v23.10.0
Long Term
---------
- Not determined.
- Third release -> v24.6.0
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 135 KiB

+566
View File
@@ -0,0 +1,566 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="249.12pt"
height="73.919998pt"
viewBox="0 0 249.12 73.919998"
version="1.1"
id="svg230"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs94">
<g
id="g89">
<g
id="glyph-0-0">
<path
d="M 1.125 0 L 1.125 -5.625 L 5.625 -5.625 L 5.625 0 Z M 1.265625 -0.140625 L 5.484375 -0.140625 L 5.484375 -5.484375 L 1.265625 -5.484375 Z M 1.265625 -0.140625 "
id="path2" />
</g>
<g
id="glyph-0-1">
<path
d="M 3.34375 -1.484375 L 4.578125 -1.28125 C 4.421875 -0.832031 4.171875 -0.488281 3.828125 -0.25 C 3.484375 -0.0078125 3.054688 0.109375 2.546875 0.109375 C 1.734375 0.109375 1.132813 -0.15625 0.75 -0.6875 C 0.4375 -1.113281 0.28125 -1.648438 0.28125 -2.296875 C 0.28125 -3.066406 0.484375 -3.671875 0.890625 -4.109375 C 1.296875 -4.546875 1.804688 -4.765625 2.421875 -4.765625 C 3.117188 -4.765625 3.664063 -4.535156 4.0625 -4.078125 C 4.46875 -3.617188 4.660156 -2.921875 4.640625 -1.984375 L 1.546875 -1.984375 C 1.554688 -1.609375 1.65625 -1.316406 1.84375 -1.109375 C 2.039063 -0.910156 2.28125 -0.8125 2.5625 -0.8125 C 2.757813 -0.8125 2.921875 -0.863281 3.046875 -0.96875 C 3.179688 -1.082031 3.28125 -1.253906 3.34375 -1.484375 Z M 3.421875 -2.734375 C 3.410156 -3.085938 3.316406 -3.359375 3.140625 -3.546875 C 2.960938 -3.734375 2.75 -3.828125 2.5 -3.828125 C 2.226563 -3.828125 2.003906 -3.726563 1.828125 -3.53125 C 1.648438 -3.332031 1.566406 -3.066406 1.578125 -2.734375 Z M 3.421875 -2.734375 "
id="path5" />
</g>
<g
id="glyph-0-2">
<path
d="M 0.046875 0 L 1.734375 -2.40625 L 0.125 -4.671875 L 1.625 -4.671875 L 2.453125 -3.390625 L 3.328125 -4.671875 L 4.78125 -4.671875 L 3.1875 -2.453125 L 4.921875 0 L 3.40625 0 L 2.453125 -1.453125 L 1.5 0 Z M 0.046875 0 "
id="path8" />
</g>
<g
id="glyph-0-3">
<path
d="M 1.5625 -3.25 L 0.453125 -3.453125 C 0.578125 -3.898438 0.789063 -4.226563 1.09375 -4.4375 C 1.40625 -4.65625 1.863281 -4.765625 2.46875 -4.765625 C 3.019531 -4.765625 3.429688 -4.695313 3.703125 -4.5625 C 3.972656 -4.4375 4.160156 -4.273438 4.265625 -4.078125 C 4.378906 -3.878906 4.4375 -3.507813 4.4375 -2.96875 L 4.421875 -1.53125 C 4.421875 -1.125 4.441406 -0.820313 4.484375 -0.625 C 4.523438 -0.425781 4.597656 -0.21875 4.703125 0 L 3.484375 0 C 3.453125 -0.0820313 3.410156 -0.203125 3.359375 -0.359375 C 3.335938 -0.429688 3.320313 -0.484375 3.3125 -0.515625 C 3.101563 -0.304688 2.878906 -0.148438 2.640625 -0.046875 C 2.398438 0.0546875 2.144531 0.109375 1.875 0.109375 C 1.394531 0.109375 1.015625 -0.0195313 0.734375 -0.28125 C 0.460938 -0.539063 0.328125 -0.875 0.328125 -1.28125 C 0.328125 -1.539063 0.390625 -1.773438 0.515625 -1.984375 C 0.640625 -2.191406 0.8125 -2.347656 1.03125 -2.453125 C 1.257813 -2.566406 1.585938 -2.664063 2.015625 -2.75 C 2.597656 -2.851563 3 -2.953125 3.21875 -3.046875 L 3.21875 -3.171875 C 3.21875 -3.410156 3.160156 -3.578125 3.046875 -3.671875 C 2.929688 -3.773438 2.707031 -3.828125 2.375 -3.828125 C 2.15625 -3.828125 1.984375 -3.78125 1.859375 -3.6875 C 1.742188 -3.601563 1.644531 -3.457031 1.5625 -3.25 Z M 3.21875 -2.234375 C 3.0625 -2.179688 2.8125 -2.117188 2.46875 -2.046875 C 2.125 -1.972656 1.898438 -1.90625 1.796875 -1.84375 C 1.640625 -1.726563 1.5625 -1.582031 1.5625 -1.40625 C 1.5625 -1.226563 1.625 -1.078125 1.75 -0.953125 C 1.875 -0.828125 2.035156 -0.765625 2.234375 -0.765625 C 2.460938 -0.765625 2.675781 -0.835938 2.875 -0.984375 C 3.03125 -1.097656 3.128906 -1.234375 3.171875 -1.390625 C 3.203125 -1.492188 3.21875 -1.695313 3.21875 -2 Z M 3.21875 -2.234375 "
id="path11" />
</g>
<g
id="glyph-0-4">
<path
d="M 0.546875 -4.671875 L 1.6875 -4.671875 L 1.6875 -4.03125 C 2.09375 -4.519531 2.578125 -4.765625 3.140625 -4.765625 C 3.441406 -4.765625 3.703125 -4.703125 3.921875 -4.578125 C 4.140625 -4.460938 4.320313 -4.28125 4.46875 -4.03125 C 4.664063 -4.28125 4.882813 -4.460938 5.125 -4.578125 C 5.363281 -4.703125 5.617188 -4.765625 5.890625 -4.765625 C 6.234375 -4.765625 6.519531 -4.695313 6.75 -4.5625 C 6.988281 -4.425781 7.171875 -4.222656 7.296875 -3.953125 C 7.378906 -3.753906 7.421875 -3.429688 7.421875 -2.984375 L 7.421875 0 L 6.1875 0 L 6.1875 -2.671875 C 6.1875 -3.128906 6.144531 -3.425781 6.0625 -3.5625 C 5.945313 -3.738281 5.769531 -3.828125 5.53125 -3.828125 C 5.351563 -3.828125 5.1875 -3.773438 5.03125 -3.671875 C 4.882813 -3.566406 4.773438 -3.410156 4.703125 -3.203125 C 4.640625 -3.003906 4.609375 -2.679688 4.609375 -2.234375 L 4.609375 0 L 3.375 0 L 3.375 -2.5625 C 3.375 -3.007813 3.351563 -3.300781 3.3125 -3.4375 C 3.269531 -3.570313 3.203125 -3.671875 3.109375 -3.734375 C 3.015625 -3.796875 2.890625 -3.828125 2.734375 -3.828125 C 2.535156 -3.828125 2.359375 -3.773438 2.203125 -3.671875 C 2.054688 -3.566406 1.945313 -3.414063 1.875 -3.21875 C 1.8125 -3.03125 1.78125 -2.710938 1.78125 -2.265625 L 1.78125 0 L 0.546875 0 Z M 0.546875 -4.671875 "
id="path14" />
</g>
<g
id="glyph-0-5">
<path
d="M 0.609375 -4.671875 L 1.765625 -4.671875 L 1.765625 -3.984375 C 1.910156 -4.210938 2.109375 -4.398438 2.359375 -4.546875 C 2.617188 -4.691406 2.90625 -4.765625 3.21875 -4.765625 C 3.757813 -4.765625 4.21875 -4.550781 4.59375 -4.125 C 4.96875 -3.707031 5.15625 -3.117188 5.15625 -2.359375 C 5.15625 -1.578125 4.960938 -0.96875 4.578125 -0.53125 C 4.203125 -0.101563 3.742188 0.109375 3.203125 0.109375 C 2.953125 0.109375 2.71875 0.0546875 2.5 -0.046875 C 2.289063 -0.148438 2.070313 -0.328125 1.84375 -0.578125 L 1.84375 1.78125 L 0.609375 1.78125 Z M 1.828125 -2.40625 C 1.828125 -1.882813 1.929688 -1.5 2.140625 -1.25 C 2.347656 -1 2.601563 -0.875 2.90625 -0.875 C 3.1875 -0.875 3.421875 -0.988281 3.609375 -1.21875 C 3.804688 -1.445313 3.90625 -1.820313 3.90625 -2.34375 C 3.90625 -2.832031 3.804688 -3.195313 3.609375 -3.4375 C 3.410156 -3.675781 3.171875 -3.796875 2.890625 -3.796875 C 2.585938 -3.796875 2.332031 -3.675781 2.125 -3.4375 C 1.925781 -3.207031 1.828125 -2.863281 1.828125 -2.40625 Z M 1.828125 -2.40625 "
id="path17" />
</g>
<g
id="glyph-0-6">
<path
d="M 0.640625 0 L 0.640625 -6.4375 L 1.875 -6.4375 L 1.875 0 Z M 0.640625 0 "
id="path20" />
</g>
<g
id="glyph-0-7">
<path
d="M 0.65625 -6.4375 L 3.03125 -6.4375 C 3.5625 -6.4375 3.96875 -6.394531 4.25 -6.3125 C 4.632813 -6.207031 4.957031 -6.007813 5.21875 -5.71875 C 5.488281 -5.4375 5.691406 -5.085938 5.828125 -4.671875 C 5.972656 -4.265625 6.046875 -3.757813 6.046875 -3.15625 C 6.046875 -2.625 5.984375 -2.164063 5.859375 -1.78125 C 5.691406 -1.3125 5.457031 -0.9375 5.15625 -0.65625 C 4.9375 -0.4375 4.632813 -0.265625 4.25 -0.140625 C 3.957031 -0.046875 3.570313 0 3.09375 0 L 0.65625 0 Z M 1.953125 -5.359375 L 1.953125 -1.078125 L 2.921875 -1.078125 C 3.285156 -1.078125 3.546875 -1.097656 3.703125 -1.140625 C 3.921875 -1.191406 4.097656 -1.28125 4.234375 -1.40625 C 4.367188 -1.539063 4.476563 -1.75 4.5625 -2.03125 C 4.65625 -2.320313 4.703125 -2.71875 4.703125 -3.21875 C 4.703125 -3.71875 4.65625 -4.097656 4.5625 -4.359375 C 4.476563 -4.628906 4.359375 -4.835938 4.203125 -4.984375 C 4.046875 -5.140625 3.847656 -5.242188 3.609375 -5.296875 C 3.421875 -5.335938 3.0625 -5.359375 2.53125 -5.359375 Z M 1.953125 -5.359375 "
id="path23" />
</g>
<g
id="glyph-0-8">
<path
d="M 0.65625 0 L 0.65625 -6.4375 L 1.953125 -6.4375 L 1.953125 -3.90625 L 4.515625 -3.90625 L 4.515625 -6.4375 L 5.8125 -6.4375 L 5.8125 0 L 4.515625 0 L 4.515625 -2.8125 L 1.953125 -2.8125 L 1.953125 0 Z M 0.65625 0 "
id="path26" />
</g>
<g
id="glyph-0-9">
<path
d="M 4.78125 -2.375 L 6.03125 -1.96875 C 5.84375 -1.269531 5.523438 -0.75 5.078125 -0.40625 C 4.628906 -0.0625 4.054688 0.109375 3.359375 0.109375 C 2.503906 0.109375 1.800781 -0.179688 1.25 -0.765625 C 0.695313 -1.347656 0.421875 -2.148438 0.421875 -3.171875 C 0.421875 -4.234375 0.695313 -5.0625 1.25 -5.65625 C 1.8125 -6.25 2.539063 -6.546875 3.4375 -6.546875 C 4.226563 -6.546875 4.867188 -6.316406 5.359375 -5.859375 C 5.648438 -5.578125 5.867188 -5.179688 6.015625 -4.671875 L 4.734375 -4.359375 C 4.660156 -4.691406 4.5 -4.953125 4.25 -5.140625 C 4.007813 -5.335938 3.71875 -5.4375 3.375 -5.4375 C 2.894531 -5.4375 2.503906 -5.265625 2.203125 -4.921875 C 1.910156 -4.578125 1.765625 -4.023438 1.765625 -3.265625 C 1.765625 -2.453125 1.910156 -1.867188 2.203125 -1.515625 C 2.492188 -1.171875 2.875 -1 3.34375 -1 C 3.695313 -1 3.992188 -1.109375 4.234375 -1.328125 C 4.484375 -1.546875 4.664063 -1.894531 4.78125 -2.375 Z M 4.78125 -2.375 "
id="path29" />
</g>
<g
id="glyph-0-10">
<path
d="M 0.65625 0 L 0.65625 -6.4375 L 2.75 -6.4375 C 3.53125 -6.4375 4.046875 -6.40625 4.296875 -6.34375 C 4.660156 -6.25 4.96875 -6.039063 5.21875 -5.71875 C 5.46875 -5.394531 5.59375 -4.972656 5.59375 -4.453125 C 5.59375 -4.066406 5.519531 -3.738281 5.375 -3.46875 C 5.226563 -3.195313 5.046875 -2.984375 4.828125 -2.828125 C 4.609375 -2.671875 4.382813 -2.566406 4.15625 -2.515625 C 3.84375 -2.460938 3.390625 -2.4375 2.796875 -2.4375 L 1.953125 -2.4375 L 1.953125 0 Z M 1.953125 -5.359375 L 1.953125 -3.53125 L 2.671875 -3.53125 C 3.179688 -3.53125 3.519531 -3.5625 3.6875 -3.625 C 3.863281 -3.695313 4 -3.800781 4.09375 -3.9375 C 4.195313 -4.082031 4.25 -4.25 4.25 -4.4375 C 4.25 -4.675781 4.179688 -4.867188 4.046875 -5.015625 C 3.910156 -5.171875 3.734375 -5.269531 3.515625 -5.3125 C 3.359375 -5.34375 3.046875 -5.359375 2.578125 -5.359375 Z M 1.953125 -5.359375 "
id="path32" />
</g>
<g
id="glyph-0-11">
<path
d="M 0.328125 -2.09375 L 1.59375 -2.21875 C 1.664063 -1.789063 1.816406 -1.476563 2.046875 -1.28125 C 2.285156 -1.082031 2.601563 -0.984375 3 -0.984375 C 3.414063 -0.984375 3.726563 -1.070313 3.9375 -1.25 C 4.15625 -1.425781 4.265625 -1.632813 4.265625 -1.875 C 4.265625 -2.019531 4.21875 -2.144531 4.125 -2.25 C 4.039063 -2.363281 3.882813 -2.460938 3.65625 -2.546875 C 3.507813 -2.597656 3.164063 -2.691406 2.625 -2.828125 C 1.925781 -2.992188 1.4375 -3.203125 1.15625 -3.453125 C 0.757813 -3.804688 0.5625 -4.238281 0.5625 -4.75 C 0.5625 -5.082031 0.648438 -5.390625 0.828125 -5.671875 C 1.015625 -5.960938 1.285156 -6.179688 1.640625 -6.328125 C 1.992188 -6.472656 2.414063 -6.546875 2.90625 -6.546875 C 3.71875 -6.546875 4.328125 -6.367188 4.734375 -6.015625 C 5.140625 -5.660156 5.351563 -5.1875 5.375 -4.59375 L 4.078125 -4.546875 C 4.023438 -4.878906 3.90625 -5.113281 3.71875 -5.25 C 3.539063 -5.394531 3.265625 -5.46875 2.890625 -5.46875 C 2.515625 -5.46875 2.222656 -5.394531 2.015625 -5.25 C 1.867188 -5.144531 1.796875 -5.007813 1.796875 -4.84375 C 1.796875 -4.6875 1.863281 -4.554688 2 -4.453125 C 2.15625 -4.316406 2.550781 -4.171875 3.1875 -4.015625 C 3.820313 -3.867188 4.289063 -3.710938 4.59375 -3.546875 C 4.894531 -3.390625 5.128906 -3.171875 5.296875 -2.890625 C 5.472656 -2.617188 5.5625 -2.28125 5.5625 -1.875 C 5.5625 -1.507813 5.457031 -1.164063 5.25 -0.84375 C 5.050781 -0.519531 4.765625 -0.28125 4.390625 -0.125 C 4.015625 0.03125 3.546875 0.109375 2.984375 0.109375 C 2.171875 0.109375 1.546875 -0.078125 1.109375 -0.453125 C 0.671875 -0.828125 0.410156 -1.375 0.328125 -2.09375 Z M 0.328125 -2.09375 "
id="path35" />
</g>
<g
id="glyph-0-12">
<path
d="M 1.828125 0 L 0.59375 0 L 0.59375 -4.671875 L 1.734375 -4.671875 L 1.734375 -4 C 1.929688 -4.3125 2.109375 -4.515625 2.265625 -4.609375 C 2.421875 -4.710938 2.597656 -4.765625 2.796875 -4.765625 C 3.078125 -4.765625 3.347656 -4.691406 3.609375 -4.546875 L 3.234375 -3.46875 C 3.023438 -3.601563 2.832031 -3.671875 2.65625 -3.671875 C 2.476563 -3.671875 2.328125 -3.617188 2.203125 -3.515625 C 2.085938 -3.421875 1.992188 -3.25 1.921875 -3 C 1.859375 -2.75 1.828125 -2.226563 1.828125 -1.4375 Z M 1.828125 0 "
id="path38" />
</g>
<g
id="glyph-0-13">
<path
d="M 1.921875 0 L 0.046875 -4.671875 L 1.34375 -4.671875 L 2.21875 -2.28125 L 2.484375 -1.484375 C 2.546875 -1.691406 2.585938 -1.828125 2.609375 -1.890625 C 2.648438 -2.023438 2.691406 -2.15625 2.734375 -2.28125 L 3.625 -4.671875 L 4.890625 -4.671875 L 3.046875 0 Z M 1.921875 0 "
id="path41" />
</g>
<g
id="glyph-1-0">
<path
d="M 1.125 0 L 1.125 -5.625 L 5.625 -5.625 L 5.625 0 Z M 1.265625 -0.140625 L 5.484375 -0.140625 L 5.484375 -5.484375 L 1.265625 -5.484375 Z M 1.265625 -0.140625 "
id="path44" />
</g>
<g
id="glyph-1-1">
<path
d="M 3.78125 -1.5 L 4.609375 -1.40625 C 4.472656 -0.925781 4.226563 -0.550781 3.875 -0.28125 C 3.53125 -0.0195313 3.085938 0.109375 2.546875 0.109375 C 1.867188 0.109375 1.328125 -0.0976563 0.921875 -0.515625 C 0.523438 -0.941406 0.328125 -1.535156 0.328125 -2.296875 C 0.328125 -3.078125 0.53125 -3.679688 0.9375 -4.109375 C 1.34375 -4.546875 1.867188 -4.765625 2.515625 -4.765625 C 3.140625 -4.765625 3.644531 -4.550781 4.03125 -4.125 C 4.425781 -3.707031 4.625 -3.113281 4.625 -2.34375 C 4.625 -2.289063 4.625 -2.21875 4.625 -2.125 L 1.140625 -2.125 C 1.171875 -1.613281 1.316406 -1.222656 1.578125 -0.953125 C 1.835938 -0.679688 2.164063 -0.546875 2.5625 -0.546875 C 2.851563 -0.546875 3.097656 -0.617188 3.296875 -0.765625 C 3.503906 -0.921875 3.664063 -1.164063 3.78125 -1.5 Z M 1.1875 -2.78125 L 3.796875 -2.78125 C 3.765625 -3.175781 3.664063 -3.472656 3.5 -3.671875 C 3.25 -3.972656 2.921875 -4.125 2.515625 -4.125 C 2.148438 -4.125 1.84375 -4 1.59375 -3.75 C 1.351563 -3.507813 1.21875 -3.1875 1.1875 -2.78125 Z M 1.1875 -2.78125 "
id="path47" />
</g>
<g
id="glyph-1-2">
<path
d="M 2.328125 -0.703125 L 2.4375 -0.015625 C 2.207031 0.0351563 2.007813 0.0625 1.84375 0.0625 C 1.550781 0.0625 1.328125 0.015625 1.171875 -0.078125 C 1.015625 -0.171875 0.898438 -0.289063 0.828125 -0.4375 C 0.765625 -0.582031 0.734375 -0.890625 0.734375 -1.359375 L 0.734375 -4.046875 L 0.15625 -4.046875 L 0.15625 -4.671875 L 0.734375 -4.671875 L 0.734375 -5.828125 L 1.53125 -6.296875 L 1.53125 -4.671875 L 2.328125 -4.671875 L 2.328125 -4.046875 L 1.53125 -4.046875 L 1.53125 -1.328125 C 1.53125 -1.097656 1.539063 -0.953125 1.5625 -0.890625 C 1.59375 -0.828125 1.640625 -0.773438 1.703125 -0.734375 C 1.765625 -0.691406 1.851563 -0.671875 1.96875 -0.671875 C 2.0625 -0.671875 2.179688 -0.679688 2.328125 -0.703125 Z M 2.328125 -0.703125 "
id="path50" />
</g>
<g
id="glyph-1-3">
<path
d="M 0.59375 0 L 0.59375 -6.4375 L 1.390625 -6.4375 L 1.390625 -4.125 C 1.753906 -4.550781 2.21875 -4.765625 2.78125 -4.765625 C 3.125 -4.765625 3.421875 -4.695313 3.671875 -4.5625 C 3.929688 -4.425781 4.113281 -4.238281 4.21875 -4 C 4.332031 -3.757813 4.390625 -3.410156 4.390625 -2.953125 L 4.390625 0 L 3.609375 0 L 3.609375 -2.953125 C 3.609375 -3.347656 3.519531 -3.632813 3.34375 -3.8125 C 3.175781 -4 2.9375 -4.09375 2.625 -4.09375 C 2.382813 -4.09375 2.160156 -4.03125 1.953125 -3.90625 C 1.742188 -3.789063 1.597656 -3.628906 1.515625 -3.421875 C 1.429688 -3.210938 1.390625 -2.921875 1.390625 -2.546875 L 1.390625 0 Z M 0.59375 0 "
id="path53" />
</g>
<g
id="glyph-1-4">
<path
d="M 0.375 -3.171875 C 0.375 -3.929688 0.453125 -4.546875 0.609375 -5.015625 C 0.765625 -5.484375 0.992188 -5.84375 1.296875 -6.09375 C 1.609375 -6.34375 2 -6.46875 2.46875 -6.46875 C 2.820313 -6.46875 3.128906 -6.394531 3.390625 -6.25 C 3.648438 -6.113281 3.863281 -5.914063 4.03125 -5.65625 C 4.195313 -5.394531 4.328125 -5.078125 4.421875 -4.703125 C 4.523438 -4.328125 4.578125 -3.816406 4.578125 -3.171875 C 4.578125 -2.421875 4.5 -1.8125 4.34375 -1.34375 C 4.1875 -0.882813 3.953125 -0.523438 3.640625 -0.265625 C 3.335938 -0.015625 2.945313 0.109375 2.46875 0.109375 C 1.851563 0.109375 1.367188 -0.113281 1.015625 -0.5625 C 0.585938 -1.09375 0.375 -1.960938 0.375 -3.171875 Z M 1.1875 -3.171875 C 1.1875 -2.117188 1.304688 -1.414063 1.546875 -1.0625 C 1.796875 -0.71875 2.101563 -0.546875 2.46875 -0.546875 C 2.832031 -0.546875 3.140625 -0.71875 3.390625 -1.0625 C 3.640625 -1.414063 3.765625 -2.117188 3.765625 -3.171875 C 3.765625 -4.234375 3.640625 -4.9375 3.390625 -5.28125 C 3.140625 -5.632813 2.832031 -5.8125 2.46875 -5.8125 C 2.101563 -5.8125 1.8125 -5.660156 1.59375 -5.359375 C 1.320313 -4.960938 1.1875 -4.234375 1.1875 -3.171875 Z M 1.1875 -3.171875 "
id="path56" />
</g>
<g
id="glyph-1-5">
<path
d="M 0.6875 0 L 0.6875 -6.4375 L 3.125 -6.4375 C 3.550781 -6.4375 3.878906 -6.414063 4.109375 -6.375 C 4.421875 -6.320313 4.679688 -6.222656 4.890625 -6.078125 C 5.109375 -5.929688 5.28125 -5.722656 5.40625 -5.453125 C 5.539063 -5.191406 5.609375 -4.898438 5.609375 -4.578125 C 5.609375 -4.023438 5.429688 -3.5625 5.078125 -3.1875 C 4.734375 -2.8125 4.109375 -2.625 3.203125 -2.625 L 1.546875 -2.625 L 1.546875 0 Z M 1.546875 -3.375 L 3.21875 -3.375 C 3.757813 -3.375 4.144531 -3.476563 4.375 -3.6875 C 4.613281 -3.894531 4.734375 -4.179688 4.734375 -4.546875 C 4.734375 -4.816406 4.664063 -5.046875 4.53125 -5.234375 C 4.394531 -5.429688 4.210938 -5.5625 3.984375 -5.625 C 3.847656 -5.664063 3.582031 -5.6875 3.1875 -5.6875 L 1.546875 -5.6875 Z M 1.546875 -3.375 "
id="path59" />
</g>
<g
id="glyph-1-6">
<path
d="M 0.296875 -2.328125 C 0.296875 -3.191406 0.535156 -3.832031 1.015625 -4.25 C 1.421875 -4.59375 1.910156 -4.765625 2.484375 -4.765625 C 3.128906 -4.765625 3.65625 -4.554688 4.0625 -4.140625 C 4.46875 -3.722656 4.671875 -3.144531 4.671875 -2.40625 C 4.671875 -1.800781 4.578125 -1.328125 4.390625 -0.984375 C 4.210938 -0.640625 3.953125 -0.367188 3.609375 -0.171875 C 3.265625 0.015625 2.890625 0.109375 2.484375 0.109375 C 1.828125 0.109375 1.296875 -0.0976563 0.890625 -0.515625 C 0.492188 -0.941406 0.296875 -1.546875 0.296875 -2.328125 Z M 1.109375 -2.328125 C 1.109375 -1.734375 1.238281 -1.285156 1.5 -0.984375 C 1.757813 -0.691406 2.085938 -0.546875 2.484375 -0.546875 C 2.878906 -0.546875 3.207031 -0.691406 3.46875 -0.984375 C 3.726563 -1.285156 3.859375 -1.742188 3.859375 -2.359375 C 3.859375 -2.929688 3.726563 -3.367188 3.46875 -3.671875 C 3.207031 -3.972656 2.878906 -4.125 2.484375 -4.125 C 2.085938 -4.125 1.757813 -3.972656 1.5 -3.671875 C 1.238281 -3.378906 1.109375 -2.929688 1.109375 -2.328125 Z M 1.109375 -2.328125 "
id="path62" />
</g>
<g
id="glyph-1-7">
<path
d="M 0.578125 0 L 0.578125 -6.4375 L 1.359375 -6.4375 L 1.359375 0 Z M 0.578125 0 "
id="path65" />
</g>
<g
id="glyph-1-8">
<path
d="M 0.8125 -3.765625 L 0.8125 -4.671875 L 1.71875 -4.671875 L 1.71875 -3.765625 Z M 0.8125 0 L 0.8125 -0.90625 L 1.71875 -0.90625 L 1.71875 0 Z M 0.8125 0 "
id="path68" />
</g>
<g
id="glyph-1-9">
<path
d="M 3.359375 0 L 2.5625 0 L 2.5625 -5.046875 C 2.375 -4.859375 2.125 -4.671875 1.8125 -4.484375 C 1.5 -4.304688 1.222656 -4.175781 0.984375 -4.09375 L 0.984375 -4.859375 C 1.421875 -5.054688 1.804688 -5.300781 2.140625 -5.59375 C 2.472656 -5.894531 2.707031 -6.1875 2.84375 -6.46875 L 3.359375 -6.46875 Z M 3.359375 0 "
id="path71" />
</g>
<g
id="glyph-1-10">
<path
d="M 0.8125 0 L 0.8125 -0.90625 L 1.71875 -0.90625 L 1.71875 0 Z M 0.8125 0 "
id="path74" />
</g>
<g
id="glyph-1-11">
<path
d="M 4.53125 -0.765625 L 4.53125 0 L 0.265625 0 C 0.265625 -0.1875 0.296875 -0.367188 0.359375 -0.546875 C 0.472656 -0.835938 0.648438 -1.125 0.890625 -1.40625 C 1.128906 -1.6875 1.472656 -2.007813 1.921875 -2.375 C 2.617188 -2.957031 3.085938 -3.414063 3.328125 -3.75 C 3.578125 -4.082031 3.703125 -4.398438 3.703125 -4.703125 C 3.703125 -5.015625 3.585938 -5.273438 3.359375 -5.484375 C 3.140625 -5.703125 2.851563 -5.8125 2.5 -5.8125 C 2.113281 -5.8125 1.804688 -5.695313 1.578125 -5.46875 C 1.347656 -5.238281 1.234375 -4.921875 1.234375 -4.515625 L 0.421875 -4.609375 C 0.472656 -5.210938 0.679688 -5.671875 1.046875 -5.984375 C 1.410156 -6.304688 1.898438 -6.46875 2.515625 -6.46875 C 3.128906 -6.46875 3.613281 -6.296875 3.96875 -5.953125 C 4.332031 -5.609375 4.515625 -5.1875 4.515625 -4.6875 C 4.515625 -4.425781 4.460938 -4.171875 4.359375 -3.921875 C 4.253906 -3.671875 4.078125 -3.40625 3.828125 -3.125 C 3.585938 -2.851563 3.1875 -2.476563 2.625 -2 C 2.144531 -1.601563 1.835938 -1.332031 1.703125 -1.1875 C 1.566406 -1.039063 1.457031 -0.898438 1.375 -0.765625 Z M 4.53125 -0.765625 "
id="path77" />
</g>
<g
id="glyph-1-12">
<path
d="M 0.28125 -1.9375 L 0.28125 -2.734375 L 2.71875 -2.734375 L 2.71875 -1.9375 Z M 0.28125 -1.9375 "
id="path80" />
</g>
<g
id="glyph-1-13">
<path
d="M 0 0.109375 L 1.875 -6.546875 L 2.5 -6.546875 L 0.640625 0.109375 Z M 0 0.109375 "
id="path83" />
</g>
<g
id="glyph-1-14">
<path
d="M 2.90625 0 L 2.90625 -1.546875 L 0.109375 -1.546875 L 0.109375 -2.265625 L 3.046875 -6.4375 L 3.703125 -6.4375 L 3.703125 -2.265625 L 4.578125 -2.265625 L 4.578125 -1.546875 L 3.703125 -1.546875 L 3.703125 0 Z M 2.90625 -2.265625 L 2.90625 -5.171875 L 0.890625 -2.265625 Z M 2.90625 -2.265625 "
id="path86" />
</g>
</g>
<clipPath
id="clip-0">
<path
clip-rule="nonzero"
d="M 0 56 L 176 56 L 176 72 L 0 72 Z M 0 56 "
id="path91" />
</clipPath>
</defs>
<path
fill-rule="nonzero"
fill="rgb(100%, 94.898987%, 79.998779%)"
fill-opacity="1"
stroke-width="1"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(83.918762%, 71.369934%, 33.729553%)"
stroke-opacity="1"
stroke-miterlimit="4"
d="M 1 1 L 81.000003 1 L 81.000003 49.500002 L 1 49.500002 Z M 1 1 "
transform="matrix(0.75, 0, 0, 0.75, 0.375, 0.375)"
id="path96" />
<g
fill="#000000"
fill-opacity="1"
id="g112">
<use
xlink:href="#glyph-0-1"
x="12.738281"
y="17.999998"
id="use98" />
<use
xlink:href="#glyph-0-2"
x="17.743652"
y="17.999998"
id="use100" />
<use
xlink:href="#glyph-0-3"
x="22.749022"
y="17.999998"
id="use102" />
<use
xlink:href="#glyph-0-4"
x="27.754393"
y="17.999998"
id="use104" />
<use
xlink:href="#glyph-0-5"
x="35.756832"
y="17.999998"
id="use106" />
<use
xlink:href="#glyph-0-6"
x="41.254395"
y="17.999998"
id="use108" />
<use
xlink:href="#glyph-0-1"
x="43.754883"
y="17.999998"
id="use110" />
</g>
<g
fill="#000000"
fill-opacity="1"
id="g122">
<use
xlink:href="#glyph-1-1"
x="21.234373"
y="33"
id="use114" />
<use
xlink:href="#glyph-1-2"
x="26.239744"
y="33"
id="use116" />
<use
xlink:href="#glyph-1-3"
x="28.740232"
y="33"
id="use118" />
<use
xlink:href="#glyph-1-4"
x="33.745605"
y="33"
id="use120" />
</g>
<path
fill="none"
stroke-width="1"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(0%, 0%, 0%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 41.000002 89.500004 L 41.000002 49.500002 "
transform="matrix(0.75, 0, 0, 0.75, 0.375, 0.375)"
id="path124" />
<g
clip-path="url(#clip-0)"
id="g128">
<path
fill="none"
stroke-width="1"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="#000000"
stroke-opacity="1"
stroke-miterlimit="10"
d="m 1,89.500004 219.00001,1.5"
transform="matrix(0.75,0,0,0.75,0.375,0.375)"
id="path126" />
</g>
<path
fill-rule="nonzero"
fill="rgb(100%, 100%, 100%)"
fill-opacity="1"
stroke-width="1"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(0%, 0%, 0%)"
stroke-opacity="1"
stroke-miterlimit="4"
d="M 140.000006 1 L 220.000009 1 L 220.000009 51.000002 L 140.000006 51.000002 Z M 140.000006 1 "
transform="matrix(0.75, 0, 0, 0.75, 0.375, 0.375)"
id="path130" />
<g
fill="#000000"
fill-opacity="1"
id="g140">
<use
xlink:href="#glyph-0-7"
x="122.23827"
y="17.249998"
id="use132" />
<use
xlink:href="#glyph-0-8"
x="128.73779"
y="17.249998"
id="use134" />
<use
xlink:href="#glyph-0-9"
x="135.2373"
y="17.249998"
id="use136" />
<use
xlink:href="#glyph-0-10"
x="141.73682"
y="17.249998"
id="use138" />
</g>
<g
fill="#000000"
fill-opacity="1"
id="g154">
<use
xlink:href="#glyph-0-11"
x="120.98437"
y="28.499998"
id="use142" />
<use
xlink:href="#glyph-0-1"
x="126.9873"
y="28.499998"
id="use144" />
<use
xlink:href="#glyph-0-12"
x="131.99268"
y="28.499998"
id="use146" />
<use
xlink:href="#glyph-0-13"
x="135.49512"
y="28.499998"
id="use148" />
<use
xlink:href="#glyph-0-1"
x="140.50049"
y="28.499998"
id="use150" />
<use
xlink:href="#glyph-0-12"
x="145.50586"
y="28.499998"
id="use152" />
</g>
<g
fill="#000000"
fill-opacity="1"
id="g166">
<use
xlink:href="#glyph-1-5"
x="174"
y="12.749999"
id="use156" />
<use
xlink:href="#glyph-1-6"
x="180.00291"
y="12.749999"
id="use158" />
<use
xlink:href="#glyph-1-6"
x="185.00829"
y="12.749999"
id="use160" />
<use
xlink:href="#glyph-1-7"
x="190.01366"
y="12.749999"
id="use162" />
<use
xlink:href="#glyph-1-8"
x="192.01318"
y="12.749999"
id="use164" />
</g>
<g
fill="#000000"
fill-opacity="1"
id="g196">
<use
xlink:href="#glyph-1-9"
x="174"
y="23.999998"
id="use168" />
<use
xlink:href="#glyph-1-4"
x="179.00537"
y="23.999998"
id="use170" />
<use
xlink:href="#glyph-1-10"
x="184.01073"
y="23.999998"
id="use172" />
<use
xlink:href="#glyph-1-9"
x="186.51123"
y="23.999998"
id="use174" />
<use
xlink:href="#glyph-1-10"
x="191.51659"
y="23.999998"
id="use176" />
<use
xlink:href="#glyph-1-11"
x="194.01707"
y="23.999998"
id="use178" />
<use
xlink:href="#glyph-1-10"
x="199.02245"
y="23.999998"
id="use180" />
<use
xlink:href="#glyph-1-9"
x="201.52293"
y="23.999998"
id="use182" />
<use
xlink:href="#glyph-1-4"
x="206.52831"
y="23.999998"
id="use184" />
<use
xlink:href="#glyph-1-4"
x="211.53368"
y="23.999998"
id="use186" />
<use
xlink:href="#glyph-1-12"
x="216.53905"
y="23.999998"
id="use188" />
<use
xlink:href="#glyph-1-9"
x="219.53612"
y="23.999998"
id="use190" />
<use
xlink:href="#glyph-1-11"
x="224.54149"
y="23.999998"
id="use192" />
<use
xlink:href="#glyph-1-4"
x="229.54686"
y="23.999998"
id="use194" />
</g>
<g
fill="#000000"
fill-opacity="1"
id="g220">
<use
xlink:href="#glyph-1-9"
x="60.726559"
y="62.249996"
id="use198" />
<use
xlink:href="#glyph-1-4"
x="65.731934"
y="62.249996"
id="use200" />
<use
xlink:href="#glyph-1-10"
x="70.737305"
y="62.249996"
id="use202" />
<use
xlink:href="#glyph-1-9"
x="73.237793"
y="62.249996"
id="use204" />
<use
xlink:href="#glyph-1-10"
x="78.243164"
y="62.249996"
id="use206" />
<use
xlink:href="#glyph-1-11"
x="80.743652"
y="62.249996"
id="use208" />
<use
xlink:href="#glyph-1-10"
x="85.749023"
y="62.249996"
id="use210" />
<use
xlink:href="#glyph-1-4"
x="88.249512"
y="62.249996"
id="use212" />
<use
xlink:href="#glyph-1-13"
x="93.254883"
y="62.249996"
id="use214" />
<use
xlink:href="#glyph-1-11"
x="95.755363"
y="62.249996"
id="use216" />
<use
xlink:href="#glyph-1-14"
x="100.76073"
y="62.249996"
id="use218" />
</g>
<path
fill="none"
stroke-width="1"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(0%, 0%, 0%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 182.000008 90.500004 L 182.000008 50.500002 "
transform="matrix(0.75, 0, 0, 0.75, 0.375, 0.375)"
id="path222" />
<g
fill="#000000"
fill-opacity="1"
id="g228">
<use
xlink:href="#glyph-1-10"
x="138.73828"
y="49.499996"
id="use224" />
<use
xlink:href="#glyph-1-9"
x="141.23877"
y="49.499996"
id="use226" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 29 KiB

+294
View File
@@ -0,0 +1,294 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="145.919998pt"
height="73.919998pt"
viewBox="0 0 145.919998 73.919998"
version="1.1"
id="svg119"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs55">
<g
id="g53">
<g
id="glyph-0-0">
<path
d="M 1.125 0 L 1.125 -5.640625 L 5.640625 -5.640625 L 5.640625 0 Z M 1.265625 -0.140625 L 5.5 -0.140625 L 5.5 -5.5 L 1.265625 -5.5 Z M 1.265625 -0.140625 "
id="path2" />
</g>
<g
id="glyph-0-1">
<path
d="M 3.359375 -1.484375 L 4.59375 -1.28125 C 4.4375 -0.832031 4.1875 -0.488281 3.84375 -0.25 C 3.5 -0.0078125 3.070313 0.109375 2.5625 0.109375 C 1.75 0.109375 1.144531 -0.15625 0.75 -0.6875 C 0.4375 -1.113281 0.28125 -1.65625 0.28125 -2.3125 C 0.28125 -3.082031 0.484375 -3.6875 0.890625 -4.125 C 1.296875 -4.5625 1.8125 -4.78125 2.4375 -4.78125 C 3.132813 -4.78125 3.679688 -4.550781 4.078125 -4.09375 C 4.484375 -3.632813 4.675781 -2.929688 4.65625 -1.984375 L 1.5625 -1.984375 C 1.5625 -1.617188 1.65625 -1.332031 1.84375 -1.125 C 2.039063 -0.914063 2.285156 -0.8125 2.578125 -0.8125 C 2.765625 -0.8125 2.925781 -0.863281 3.0625 -0.96875 C 3.195313 -1.082031 3.296875 -1.253906 3.359375 -1.484375 Z M 3.4375 -2.75 C 3.425781 -3.101563 3.332031 -3.375 3.15625 -3.5625 C 2.976563 -3.75 2.765625 -3.84375 2.515625 -3.84375 C 2.242188 -3.84375 2.019531 -3.742188 1.84375 -3.546875 C 1.664063 -3.347656 1.578125 -3.082031 1.578125 -2.75 Z M 3.4375 -2.75 "
id="path5" />
</g>
<g
id="glyph-0-2">
<path
d="M 0.046875 0 L 1.734375 -2.40625 L 0.125 -4.6875 L 1.640625 -4.6875 L 2.46875 -3.390625 L 3.34375 -4.6875 L 4.796875 -4.6875 L 3.203125 -2.46875 L 4.9375 0 L 3.421875 0 L 2.46875 -1.453125 L 1.5 0 Z M 0.046875 0 "
id="path8" />
</g>
<g
id="glyph-0-3">
<path
d="M 1.578125 -3.25 L 0.453125 -3.453125 C 0.578125 -3.910156 0.789063 -4.242188 1.09375 -4.453125 C 1.40625 -4.671875 1.867188 -4.78125 2.484375 -4.78125 C 3.035156 -4.78125 3.445313 -4.710938 3.71875 -4.578125 C 3.988281 -4.453125 4.175781 -4.289063 4.28125 -4.09375 C 4.394531 -3.894531 4.453125 -3.523438 4.453125 -2.984375 L 4.4375 -1.53125 C 4.4375 -1.125 4.457031 -0.820313 4.5 -0.625 C 4.539063 -0.425781 4.613281 -0.21875 4.71875 0 L 3.5 0 C 3.457031 -0.0820313 3.414063 -0.203125 3.375 -0.359375 C 3.351563 -0.429688 3.335938 -0.484375 3.328125 -0.515625 C 3.117188 -0.304688 2.890625 -0.148438 2.640625 -0.046875 C 2.398438 0.0546875 2.144531 0.109375 1.875 0.109375 C 1.394531 0.109375 1.015625 -0.0195313 0.734375 -0.28125 C 0.460938 -0.539063 0.328125 -0.875 0.328125 -1.28125 C 0.328125 -1.539063 0.390625 -1.773438 0.515625 -1.984375 C 0.640625 -2.191406 0.816406 -2.347656 1.046875 -2.453125 C 1.273438 -2.566406 1.601563 -2.664063 2.03125 -2.75 C 2.601563 -2.863281 3.003906 -2.96875 3.234375 -3.0625 L 3.234375 -3.171875 C 3.234375 -3.410156 3.171875 -3.582031 3.046875 -3.6875 C 2.929688 -3.789063 2.710938 -3.84375 2.390625 -3.84375 C 2.171875 -3.84375 2 -3.796875 1.875 -3.703125 C 1.75 -3.617188 1.648438 -3.46875 1.578125 -3.25 Z M 3.234375 -2.25 C 3.078125 -2.195313 2.828125 -2.132813 2.484375 -2.0625 C 2.140625 -1.988281 1.910156 -1.914063 1.796875 -1.84375 C 1.640625 -1.726563 1.5625 -1.582031 1.5625 -1.40625 C 1.5625 -1.226563 1.625 -1.078125 1.75 -0.953125 C 1.882813 -0.828125 2.050781 -0.765625 2.25 -0.765625 C 2.46875 -0.765625 2.679688 -0.835938 2.890625 -0.984375 C 3.035156 -1.097656 3.132813 -1.234375 3.1875 -1.390625 C 3.21875 -1.503906 3.234375 -1.707031 3.234375 -2 Z M 3.234375 -2.25 "
id="path11" />
</g>
<g
id="glyph-0-4">
<path
d="M 0.5625 -4.6875 L 1.703125 -4.6875 L 1.703125 -4.046875 C 2.109375 -4.535156 2.59375 -4.78125 3.15625 -4.78125 C 3.457031 -4.78125 3.71875 -4.71875 3.9375 -4.59375 C 4.15625 -4.476563 4.335938 -4.296875 4.484375 -4.046875 C 4.679688 -4.296875 4.898438 -4.476563 5.140625 -4.59375 C 5.378906 -4.71875 5.632813 -4.78125 5.90625 -4.78125 C 6.25 -4.78125 6.539063 -4.710938 6.78125 -4.578125 C 7.019531 -4.441406 7.195313 -4.238281 7.3125 -3.96875 C 7.394531 -3.769531 7.4375 -3.445313 7.4375 -3 L 7.4375 0 L 6.203125 0 L 6.203125 -2.671875 C 6.203125 -3.140625 6.160156 -3.441406 6.078125 -3.578125 C 5.960938 -3.753906 5.785156 -3.84375 5.546875 -3.84375 C 5.367188 -3.84375 5.203125 -3.785156 5.046875 -3.671875 C 4.898438 -3.566406 4.789063 -3.410156 4.71875 -3.203125 C 4.65625 -3.003906 4.625 -2.6875 4.625 -2.25 L 4.625 0 L 3.390625 0 L 3.390625 -2.5625 C 3.390625 -3.019531 3.363281 -3.3125 3.3125 -3.4375 C 3.269531 -3.570313 3.203125 -3.671875 3.109375 -3.734375 C 3.023438 -3.804688 2.898438 -3.84375 2.734375 -3.84375 C 2.546875 -3.84375 2.375 -3.789063 2.21875 -3.6875 C 2.070313 -3.582031 1.960938 -3.429688 1.890625 -3.234375 C 1.828125 -3.046875 1.796875 -2.726563 1.796875 -2.28125 L 1.796875 0 L 0.5625 0 Z M 0.5625 -4.6875 "
id="path14" />
</g>
<g
id="glyph-0-5">
<path
d="M 0.609375 -4.6875 L 1.765625 -4.6875 L 1.765625 -4 C 1.921875 -4.226563 2.125 -4.414063 2.375 -4.5625 C 2.632813 -4.707031 2.921875 -4.78125 3.234375 -4.78125 C 3.773438 -4.78125 4.234375 -4.566406 4.609375 -4.140625 C 4.992188 -3.722656 5.1875 -3.132813 5.1875 -2.375 C 5.1875 -1.582031 4.992188 -0.96875 4.609375 -0.53125 C 4.222656 -0.101563 3.757813 0.109375 3.21875 0.109375 C 2.957031 0.109375 2.722656 0.0546875 2.515625 -0.046875 C 2.304688 -0.148438 2.085938 -0.328125 1.859375 -0.578125 L 1.859375 1.78125 L 0.609375 1.78125 Z M 1.84375 -2.421875 C 1.84375 -1.890625 1.945313 -1.5 2.15625 -1.25 C 2.363281 -1 2.617188 -0.875 2.921875 -0.875 C 3.203125 -0.875 3.4375 -0.988281 3.625 -1.21875 C 3.820313 -1.445313 3.921875 -1.828125 3.921875 -2.359375 C 3.921875 -2.847656 3.820313 -3.210938 3.625 -3.453125 C 3.425781 -3.691406 3.179688 -3.8125 2.890625 -3.8125 C 2.585938 -3.8125 2.335938 -3.691406 2.140625 -3.453125 C 1.941406 -3.222656 1.84375 -2.878906 1.84375 -2.421875 Z M 1.84375 -2.421875 "
id="path17" />
</g>
<g
id="glyph-0-6">
<path
d="M 0.640625 0 L 0.640625 -6.46875 L 1.890625 -6.46875 L 1.890625 0 Z M 0.640625 0 "
id="path20" />
</g>
<g
id="glyph-1-0">
<path
d="M 1.125 0 L 1.125 -5.640625 L 5.640625 -5.640625 L 5.640625 0 Z M 1.265625 -0.140625 L 5.5 -0.140625 L 5.5 -5.5 L 1.265625 -5.5 Z M 1.265625 -0.140625 "
id="path23" />
</g>
<g
id="glyph-1-1">
<path
d="M 3.796875 -1.515625 L 4.625 -1.40625 C 4.488281 -0.925781 4.242188 -0.550781 3.890625 -0.28125 C 3.546875 -0.0195313 3.101563 0.109375 2.5625 0.109375 C 1.875 0.109375 1.328125 -0.0976563 0.921875 -0.515625 C 0.523438 -0.941406 0.328125 -1.535156 0.328125 -2.296875 C 0.328125 -3.085938 0.53125 -3.695313 0.9375 -4.125 C 1.34375 -4.5625 1.867188 -4.78125 2.515625 -4.78125 C 3.140625 -4.78125 3.648438 -4.566406 4.046875 -4.140625 C 4.441406 -3.722656 4.640625 -3.125 4.640625 -2.34375 C 4.640625 -2.300781 4.640625 -2.234375 4.640625 -2.140625 L 1.15625 -2.140625 C 1.175781 -1.617188 1.316406 -1.222656 1.578125 -0.953125 C 1.847656 -0.679688 2.175781 -0.546875 2.5625 -0.546875 C 2.851563 -0.546875 3.101563 -0.617188 3.3125 -0.765625 C 3.519531 -0.921875 3.679688 -1.171875 3.796875 -1.515625 Z M 1.1875 -2.796875 L 3.8125 -2.796875 C 3.769531 -3.179688 3.671875 -3.472656 3.515625 -3.671875 C 3.253906 -3.984375 2.925781 -4.140625 2.53125 -4.140625 C 2.164063 -4.140625 1.859375 -4.015625 1.609375 -3.765625 C 1.359375 -3.523438 1.21875 -3.203125 1.1875 -2.796875 Z M 1.1875 -2.796875 "
id="path26" />
</g>
<g
id="glyph-1-2">
<path
d="M 2.328125 -0.703125 L 2.4375 -0.015625 C 2.21875 0.0351563 2.019531 0.0625 1.84375 0.0625 C 1.550781 0.0625 1.328125 0.015625 1.171875 -0.078125 C 1.015625 -0.171875 0.898438 -0.289063 0.828125 -0.4375 C 0.765625 -0.582031 0.734375 -0.894531 0.734375 -1.375 L 0.734375 -4.0625 L 0.15625 -4.0625 L 0.15625 -4.6875 L 0.734375 -4.6875 L 0.734375 -5.84375 L 1.53125 -6.3125 L 1.53125 -4.6875 L 2.328125 -4.6875 L 2.328125 -4.0625 L 1.53125 -4.0625 L 1.53125 -1.328125 C 1.53125 -1.097656 1.539063 -0.953125 1.5625 -0.890625 C 1.59375 -0.828125 1.640625 -0.773438 1.703125 -0.734375 C 1.765625 -0.691406 1.859375 -0.671875 1.984375 -0.671875 C 2.066406 -0.671875 2.179688 -0.679688 2.328125 -0.703125 Z M 2.328125 -0.703125 "
id="path29" />
</g>
<g
id="glyph-1-3">
<path
d="M 0.59375 0 L 0.59375 -6.46875 L 1.390625 -6.46875 L 1.390625 -4.140625 C 1.753906 -4.566406 2.222656 -4.78125 2.796875 -4.78125 C 3.140625 -4.78125 3.4375 -4.710938 3.6875 -4.578125 C 3.945313 -4.441406 4.128906 -4.253906 4.234375 -4.015625 C 4.347656 -3.773438 4.40625 -3.425781 4.40625 -2.96875 L 4.40625 0 L 3.609375 0 L 3.609375 -2.96875 C 3.609375 -3.363281 3.519531 -3.648438 3.34375 -3.828125 C 3.175781 -4.015625 2.9375 -4.109375 2.625 -4.109375 C 2.394531 -4.109375 2.175781 -4.046875 1.96875 -3.921875 C 1.757813 -3.796875 1.609375 -3.628906 1.515625 -3.421875 C 1.429688 -3.210938 1.390625 -2.925781 1.390625 -2.5625 L 1.390625 0 Z M 0.59375 0 "
id="path32" />
</g>
<g
id="glyph-1-4">
<path
d="M 0.375 -3.1875 C 0.375 -3.945313 0.453125 -4.5625 0.609375 -5.03125 C 0.765625 -5.5 1 -5.859375 1.3125 -6.109375 C 1.625 -6.359375 2.015625 -6.484375 2.484375 -6.484375 C 2.828125 -6.484375 3.128906 -6.414063 3.390625 -6.28125 C 3.648438 -6.144531 3.863281 -5.941406 4.03125 -5.671875 C 4.207031 -5.410156 4.34375 -5.09375 4.4375 -4.71875 C 4.539063 -4.34375 4.59375 -3.832031 4.59375 -3.1875 C 4.59375 -2.425781 4.515625 -1.8125 4.359375 -1.34375 C 4.203125 -0.882813 3.96875 -0.523438 3.65625 -0.265625 C 3.34375 -0.015625 2.953125 0.109375 2.484375 0.109375 C 1.859375 0.109375 1.367188 -0.113281 1.015625 -0.5625 C 0.585938 -1.09375 0.375 -1.96875 0.375 -3.1875 Z M 1.1875 -3.1875 C 1.1875 -2.125 1.3125 -1.414063 1.5625 -1.0625 C 1.8125 -0.71875 2.117188 -0.546875 2.484375 -0.546875 C 2.847656 -0.546875 3.15625 -0.71875 3.40625 -1.0625 C 3.65625 -1.414063 3.78125 -2.125 3.78125 -3.1875 C 3.78125 -4.25 3.65625 -4.953125 3.40625 -5.296875 C 3.15625 -5.648438 2.84375 -5.828125 2.46875 -5.828125 C 2.101563 -5.828125 1.8125 -5.675781 1.59375 -5.375 C 1.320313 -4.976563 1.1875 -4.25 1.1875 -3.1875 Z M 1.1875 -3.1875 "
id="path35" />
</g>
<g
id="glyph-1-5">
<path
d="M 3.359375 0 L 2.578125 0 L 2.578125 -5.0625 C 2.378906 -4.875 2.125 -4.6875 1.8125 -4.5 C 1.507813 -4.320313 1.234375 -4.1875 0.984375 -4.09375 L 0.984375 -4.875 C 1.429688 -5.082031 1.816406 -5.332031 2.140625 -5.625 C 2.472656 -5.925781 2.710938 -6.210938 2.859375 -6.484375 L 3.359375 -6.484375 Z M 3.359375 0 "
id="path38" />
</g>
<g
id="glyph-1-6">
<path
d="M 0.8125 0 L 0.8125 -0.90625 L 1.71875 -0.90625 L 1.71875 0 Z M 0.8125 0 "
id="path41" />
</g>
<g
id="glyph-1-7">
<path
d="M 0 0.109375 L 1.875 -6.578125 L 2.515625 -6.578125 L 0.640625 0.109375 Z M 0 0.109375 "
id="path44" />
</g>
<g
id="glyph-1-8">
<path
d="M 4.546875 -0.765625 L 4.546875 0 L 0.265625 0 C 0.265625 -0.1875 0.296875 -0.367188 0.359375 -0.546875 C 0.472656 -0.835938 0.648438 -1.125 0.890625 -1.40625 C 1.128906 -1.6875 1.472656 -2.015625 1.921875 -2.390625 C 2.628906 -2.960938 3.101563 -3.414063 3.34375 -3.75 C 3.59375 -4.09375 3.71875 -4.414063 3.71875 -4.71875 C 3.71875 -5.03125 3.601563 -5.289063 3.375 -5.5 C 3.15625 -5.71875 2.863281 -5.828125 2.5 -5.828125 C 2.125 -5.828125 1.820313 -5.710938 1.59375 -5.484375 C 1.363281 -5.253906 1.242188 -4.9375 1.234375 -4.53125 L 0.421875 -4.625 C 0.472656 -5.226563 0.679688 -5.6875 1.046875 -6 C 1.410156 -6.320313 1.898438 -6.484375 2.515625 -6.484375 C 3.140625 -6.484375 3.628906 -6.3125 3.984375 -5.96875 C 4.347656 -5.625 4.53125 -5.203125 4.53125 -4.703125 C 4.53125 -4.441406 4.476563 -4.1875 4.375 -3.9375 C 4.269531 -3.6875 4.09375 -3.421875 3.84375 -3.140625 C 3.601563 -2.867188 3.195313 -2.488281 2.625 -2 C 2.144531 -1.601563 1.835938 -1.332031 1.703125 -1.1875 C 1.578125 -1.050781 1.46875 -0.910156 1.375 -0.765625 Z M 4.546875 -0.765625 "
id="path47" />
</g>
<g
id="glyph-1-9">
<path
d="M 2.921875 0 L 2.921875 -1.546875 L 0.109375 -1.546875 L 0.109375 -2.28125 L 3.0625 -6.46875 L 3.71875 -6.46875 L 3.71875 -2.28125 L 4.59375 -2.28125 L 4.59375 -1.546875 L 3.71875 -1.546875 L 3.71875 0 Z M 2.921875 -2.28125 L 2.921875 -5.1875 L 0.890625 -2.28125 Z M 2.921875 -2.28125 "
id="path50" />
</g>
</g>
</defs>
<path
fill-rule="nonzero"
fill="rgb(100%, 94.898987%, 79.998779%)"
fill-opacity="1"
stroke-width="1"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(83.918762%, 71.369934%, 33.729553%)"
stroke-opacity="1"
stroke-miterlimit="4"
d="M 1.000054 1.000054 L 81.001187 1.000054 L 81.001187 51.000113 L 1.000054 51.000113 Z M 1.000054 1.000054 "
transform="matrix(0.752577, 0, 0, 0.752577, 0.376289, 0.376289)"
id="path57" />
<g
fill="#000000"
fill-opacity="1"
id="g73">
<use
xlink:href="#glyph-0-1"
x="12.782054"
y="18.81443"
id="use59" />
<use
xlink:href="#glyph-0-2"
x="17.804625"
y="18.81443"
id="use61" />
<use
xlink:href="#glyph-0-3"
x="22.827196"
y="18.81443"
id="use63" />
<use
xlink:href="#glyph-0-4"
x="27.849768"
y="18.81443"
id="use65" />
<use
xlink:href="#glyph-0-5"
x="35.879707"
y="18.81443"
id="use67" />
<use
xlink:href="#glyph-0-6"
x="41.396156"
y="18.81443"
id="use69" />
<use
xlink:href="#glyph-0-1"
x="43.905239"
y="18.81443"
id="use71" />
</g>
<g
fill="#000000"
fill-opacity="1"
id="g83">
<use
xlink:href="#glyph-1-1"
x="21.307343"
y="33.865974"
id="use75" />
<use
xlink:href="#glyph-1-2"
x="26.329914"
y="33.865974"
id="use77" />
<use
xlink:href="#glyph-1-3"
x="28.838995"
y="33.865974"
id="use79" />
<use
xlink:href="#glyph-1-4"
x="33.861565"
y="33.865974"
id="use81" />
</g>
<path
fill="none"
stroke-width="1"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(0%, 0%, 0%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 40.998025 90.998084 L 40.998025 51.000113 "
transform="matrix(0.752577, 0, 0, 0.752577, 0.376289, 0.376289)"
id="path85" />
<path
fill="none"
stroke-width="1"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(0%, 0%, 0%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 1.000054 90.998084 L 190.998203 90.998084 "
transform="matrix(0.752577, 0, 0, 0.752577, 0.376289, 0.376289)"
id="path87" />
<g
fill="#000000"
fill-opacity="1"
id="g111">
<use
xlink:href="#glyph-1-5"
x="66.955856"
y="62.463909"
id="use89" />
<use
xlink:href="#glyph-1-4"
x="71.978424"
y="62.463909"
id="use91" />
<use
xlink:href="#glyph-1-6"
x="77.000999"
y="62.463909"
id="use93" />
<use
xlink:href="#glyph-1-4"
x="79.510078"
y="62.463909"
id="use95" />
<use
xlink:href="#glyph-1-6"
x="84.532654"
y="62.463909"
id="use97" />
<use
xlink:href="#glyph-1-5"
x="87.041733"
y="62.463909"
id="use99" />
<use
xlink:href="#glyph-1-6"
x="92.064301"
y="62.463909"
id="use101" />
<use
xlink:href="#glyph-1-4"
x="94.57338"
y="62.463909"
id="use103" />
<use
xlink:href="#glyph-1-7"
x="99.595955"
y="62.463909"
id="use105" />
<use
xlink:href="#glyph-1-8"
x="102.10503"
y="62.463909"
id="use107" />
<use
xlink:href="#glyph-1-9"
x="107.1276"
y="62.463909"
id="use109" />
</g>
<g
fill="#000000"
fill-opacity="1"
id="g117">
<use
xlink:href="#glyph-1-6"
x="18.802671"
y="48.917519"
id="use113" />
<use
xlink:href="#glyph-1-5"
x="21.311752"
y="48.917519"
id="use115" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 16 KiB

@@ -0,0 +1,507 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="168pt"
height="71.040001pt"
viewBox="0 0 168 71.040001"
version="1.1"
id="svg207"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs97">
<g
id="g92">
<g
id="glyph-0-0">
<path
d="M 1.125 0 L 1.125 -5.625 L 5.625 -5.625 L 5.625 0 Z M 1.265625 -0.140625 L 5.484375 -0.140625 L 5.484375 -5.484375 L 1.265625 -5.484375 Z M 1.265625 -0.140625 "
id="path2" />
</g>
<g
id="glyph-0-1">
<path
d="M 3.34375 -1.484375 L 4.578125 -1.28125 C 4.421875 -0.832031 4.171875 -0.488281 3.828125 -0.25 C 3.484375 -0.0078125 3.054688 0.109375 2.546875 0.109375 C 1.734375 0.109375 1.132813 -0.15625 0.75 -0.6875 C 0.4375 -1.113281 0.28125 -1.648438 0.28125 -2.296875 C 0.28125 -3.066406 0.484375 -3.671875 0.890625 -4.109375 C 1.296875 -4.546875 1.804688 -4.765625 2.421875 -4.765625 C 3.117188 -4.765625 3.664063 -4.535156 4.0625 -4.078125 C 4.46875 -3.617188 4.660156 -2.921875 4.640625 -1.984375 L 1.546875 -1.984375 C 1.554688 -1.609375 1.65625 -1.316406 1.84375 -1.109375 C 2.039063 -0.910156 2.28125 -0.8125 2.5625 -0.8125 C 2.757813 -0.8125 2.921875 -0.863281 3.046875 -0.96875 C 3.179688 -1.082031 3.28125 -1.253906 3.34375 -1.484375 Z M 3.421875 -2.734375 C 3.410156 -3.085938 3.316406 -3.359375 3.140625 -3.546875 C 2.960938 -3.734375 2.75 -3.828125 2.5 -3.828125 C 2.226563 -3.828125 2.003906 -3.726563 1.828125 -3.53125 C 1.648438 -3.332031 1.566406 -3.066406 1.578125 -2.734375 Z M 3.421875 -2.734375 "
id="path5" />
</g>
<g
id="glyph-0-2">
<path
d="M 0.046875 0 L 1.734375 -2.40625 L 0.125 -4.671875 L 1.625 -4.671875 L 2.453125 -3.390625 L 3.328125 -4.671875 L 4.78125 -4.671875 L 3.1875 -2.453125 L 4.921875 0 L 3.40625 0 L 2.453125 -1.453125 L 1.5 0 Z M 0.046875 0 "
id="path8" />
</g>
<g
id="glyph-0-3">
<path
d="M 1.5625 -3.25 L 0.453125 -3.453125 C 0.578125 -3.898438 0.789063 -4.226563 1.09375 -4.4375 C 1.40625 -4.65625 1.863281 -4.765625 2.46875 -4.765625 C 3.019531 -4.765625 3.429688 -4.695313 3.703125 -4.5625 C 3.972656 -4.4375 4.160156 -4.273438 4.265625 -4.078125 C 4.378906 -3.878906 4.4375 -3.507813 4.4375 -2.96875 L 4.421875 -1.53125 C 4.421875 -1.125 4.441406 -0.820313 4.484375 -0.625 C 4.523438 -0.425781 4.597656 -0.21875 4.703125 0 L 3.484375 0 C 3.453125 -0.0820313 3.410156 -0.203125 3.359375 -0.359375 C 3.335938 -0.429688 3.320313 -0.484375 3.3125 -0.515625 C 3.101563 -0.304688 2.878906 -0.148438 2.640625 -0.046875 C 2.398438 0.0546875 2.144531 0.109375 1.875 0.109375 C 1.394531 0.109375 1.015625 -0.0195313 0.734375 -0.28125 C 0.460938 -0.539063 0.328125 -0.875 0.328125 -1.28125 C 0.328125 -1.539063 0.390625 -1.773438 0.515625 -1.984375 C 0.640625 -2.191406 0.8125 -2.347656 1.03125 -2.453125 C 1.257813 -2.566406 1.585938 -2.664063 2.015625 -2.75 C 2.597656 -2.851563 3 -2.953125 3.21875 -3.046875 L 3.21875 -3.171875 C 3.21875 -3.410156 3.160156 -3.578125 3.046875 -3.671875 C 2.929688 -3.773438 2.707031 -3.828125 2.375 -3.828125 C 2.15625 -3.828125 1.984375 -3.78125 1.859375 -3.6875 C 1.742188 -3.601563 1.644531 -3.457031 1.5625 -3.25 Z M 3.21875 -2.234375 C 3.0625 -2.179688 2.8125 -2.117188 2.46875 -2.046875 C 2.125 -1.972656 1.898438 -1.90625 1.796875 -1.84375 C 1.640625 -1.726563 1.5625 -1.582031 1.5625 -1.40625 C 1.5625 -1.226563 1.625 -1.078125 1.75 -0.953125 C 1.875 -0.828125 2.035156 -0.765625 2.234375 -0.765625 C 2.460938 -0.765625 2.675781 -0.835938 2.875 -0.984375 C 3.03125 -1.097656 3.128906 -1.234375 3.171875 -1.390625 C 3.203125 -1.492188 3.21875 -1.695313 3.21875 -2 Z M 3.21875 -2.234375 "
id="path11" />
</g>
<g
id="glyph-0-4">
<path
d="M 0.546875 -4.671875 L 1.6875 -4.671875 L 1.6875 -4.03125 C 2.09375 -4.519531 2.578125 -4.765625 3.140625 -4.765625 C 3.441406 -4.765625 3.703125 -4.703125 3.921875 -4.578125 C 4.140625 -4.460938 4.320313 -4.28125 4.46875 -4.03125 C 4.664063 -4.28125 4.882813 -4.460938 5.125 -4.578125 C 5.363281 -4.703125 5.617188 -4.765625 5.890625 -4.765625 C 6.234375 -4.765625 6.519531 -4.695313 6.75 -4.5625 C 6.988281 -4.425781 7.171875 -4.222656 7.296875 -3.953125 C 7.378906 -3.753906 7.421875 -3.429688 7.421875 -2.984375 L 7.421875 0 L 6.1875 0 L 6.1875 -2.671875 C 6.1875 -3.128906 6.144531 -3.425781 6.0625 -3.5625 C 5.945313 -3.738281 5.769531 -3.828125 5.53125 -3.828125 C 5.351563 -3.828125 5.1875 -3.773438 5.03125 -3.671875 C 4.882813 -3.566406 4.773438 -3.410156 4.703125 -3.203125 C 4.640625 -3.003906 4.609375 -2.679688 4.609375 -2.234375 L 4.609375 0 L 3.375 0 L 3.375 -2.5625 C 3.375 -3.007813 3.351563 -3.300781 3.3125 -3.4375 C 3.269531 -3.570313 3.203125 -3.671875 3.109375 -3.734375 C 3.015625 -3.796875 2.890625 -3.828125 2.734375 -3.828125 C 2.535156 -3.828125 2.359375 -3.773438 2.203125 -3.671875 C 2.054688 -3.566406 1.945313 -3.414063 1.875 -3.21875 C 1.8125 -3.03125 1.78125 -2.710938 1.78125 -2.265625 L 1.78125 0 L 0.546875 0 Z M 0.546875 -4.671875 "
id="path14" />
</g>
<g
id="glyph-0-5">
<path
d="M 0.609375 -4.671875 L 1.765625 -4.671875 L 1.765625 -3.984375 C 1.910156 -4.210938 2.109375 -4.398438 2.359375 -4.546875 C 2.617188 -4.691406 2.90625 -4.765625 3.21875 -4.765625 C 3.757813 -4.765625 4.21875 -4.550781 4.59375 -4.125 C 4.96875 -3.707031 5.15625 -3.117188 5.15625 -2.359375 C 5.15625 -1.578125 4.960938 -0.96875 4.578125 -0.53125 C 4.203125 -0.101563 3.742188 0.109375 3.203125 0.109375 C 2.953125 0.109375 2.71875 0.0546875 2.5 -0.046875 C 2.289063 -0.148438 2.070313 -0.328125 1.84375 -0.578125 L 1.84375 1.78125 L 0.609375 1.78125 Z M 1.828125 -2.40625 C 1.828125 -1.882813 1.929688 -1.5 2.140625 -1.25 C 2.347656 -1 2.601563 -0.875 2.90625 -0.875 C 3.1875 -0.875 3.421875 -0.988281 3.609375 -1.21875 C 3.804688 -1.445313 3.90625 -1.820313 3.90625 -2.34375 C 3.90625 -2.832031 3.804688 -3.195313 3.609375 -3.4375 C 3.410156 -3.675781 3.171875 -3.796875 2.890625 -3.796875 C 2.585938 -3.796875 2.332031 -3.675781 2.125 -3.4375 C 1.925781 -3.207031 1.828125 -2.863281 1.828125 -2.40625 Z M 1.828125 -2.40625 "
id="path17" />
</g>
<g
id="glyph-0-6">
<path
d="M 0.640625 0 L 0.640625 -6.4375 L 1.875 -6.4375 L 1.875 0 Z M 0.640625 0 "
id="path20" />
</g>
<g
id="glyph-0-7">
<path
d="M 0.609375 0 L 0.609375 -6.4375 L 1.921875 -6.4375 L 1.921875 0 Z M 0.609375 0 "
id="path23" />
</g>
<g
id="glyph-0-8">
<path
d="M 0.65625 0 L 0.65625 -6.4375 L 2.75 -6.4375 C 3.53125 -6.4375 4.046875 -6.40625 4.296875 -6.34375 C 4.660156 -6.25 4.96875 -6.039063 5.21875 -5.71875 C 5.46875 -5.394531 5.59375 -4.972656 5.59375 -4.453125 C 5.59375 -4.066406 5.519531 -3.738281 5.375 -3.46875 C 5.226563 -3.195313 5.046875 -2.984375 4.828125 -2.828125 C 4.609375 -2.671875 4.382813 -2.566406 4.15625 -2.515625 C 3.84375 -2.460938 3.390625 -2.4375 2.796875 -2.4375 L 1.953125 -2.4375 L 1.953125 0 Z M 1.953125 -5.359375 L 1.953125 -3.53125 L 2.671875 -3.53125 C 3.179688 -3.53125 3.519531 -3.5625 3.6875 -3.625 C 3.863281 -3.695313 4 -3.800781 4.09375 -3.9375 C 4.195313 -4.082031 4.25 -4.25 4.25 -4.4375 C 4.25 -4.675781 4.179688 -4.867188 4.046875 -5.015625 C 3.910156 -5.171875 3.734375 -5.269531 3.515625 -5.3125 C 3.359375 -5.34375 3.046875 -5.359375 2.578125 -5.359375 Z M 1.953125 -5.359375 "
id="path26" />
</g>
<g
id="glyph-0-9">
<path
d="M 1.921875 0 L 0.046875 -4.671875 L 1.34375 -4.671875 L 2.21875 -2.28125 L 2.484375 -1.484375 C 2.546875 -1.691406 2.585938 -1.828125 2.609375 -1.890625 C 2.648438 -2.023438 2.691406 -2.15625 2.734375 -2.28125 L 3.625 -4.671875 L 4.890625 -4.671875 L 3.046875 0 Z M 1.921875 0 "
id="path29" />
</g>
<g
id="glyph-0-10">
<path
d="M 4.5625 -4.859375 L 3.375 -4.734375 C 3.34375 -4.984375 3.265625 -5.164063 3.140625 -5.28125 C 3.015625 -5.394531 2.851563 -5.453125 2.65625 -5.453125 C 2.394531 -5.453125 2.175781 -5.332031 2 -5.09375 C 1.820313 -4.863281 1.707031 -4.378906 1.65625 -3.640625 C 1.96875 -4.003906 2.351563 -4.1875 2.8125 -4.1875 C 3.320313 -4.1875 3.757813 -3.988281 4.125 -3.59375 C 4.5 -3.195313 4.6875 -2.691406 4.6875 -2.078125 C 4.6875 -1.410156 4.492188 -0.878906 4.109375 -0.484375 C 3.722656 -0.0859375 3.222656 0.109375 2.609375 0.109375 C 1.960938 0.109375 1.425781 -0.140625 1 -0.640625 C 0.582031 -1.148438 0.375 -1.984375 0.375 -3.140625 C 0.375 -4.316406 0.59375 -5.164063 1.03125 -5.6875 C 1.46875 -6.207031 2.035156 -6.46875 2.734375 -6.46875 C 3.222656 -6.46875 3.628906 -6.328125 3.953125 -6.046875 C 4.273438 -5.773438 4.476563 -5.378906 4.5625 -4.859375 Z M 1.765625 -2.171875 C 1.765625 -1.765625 1.859375 -1.453125 2.046875 -1.234375 C 2.234375 -1.023438 2.441406 -0.921875 2.671875 -0.921875 C 2.898438 -0.921875 3.085938 -1.007813 3.234375 -1.1875 C 3.390625 -1.363281 3.46875 -1.65625 3.46875 -2.0625 C 3.46875 -2.476563 3.382813 -2.785156 3.21875 -2.984375 C 3.0625 -3.179688 2.859375 -3.28125 2.609375 -3.28125 C 2.378906 -3.28125 2.179688 -3.1875 2.015625 -3 C 1.847656 -2.8125 1.765625 -2.535156 1.765625 -2.171875 Z M 1.765625 -2.171875 "
id="path32" />
</g>
<g
id="glyph-0-11">
<path
d="M 0.65625 0 L 0.65625 -6.4375 L 3.390625 -6.4375 C 4.085938 -6.4375 4.585938 -6.378906 4.890625 -6.265625 C 5.203125 -6.148438 5.453125 -5.941406 5.640625 -5.640625 C 5.828125 -5.347656 5.921875 -5.015625 5.921875 -4.640625 C 5.921875 -4.148438 5.78125 -3.75 5.5 -3.4375 C 5.21875 -3.125 4.796875 -2.925781 4.234375 -2.84375 C 4.515625 -2.675781 4.742188 -2.492188 4.921875 -2.296875 C 5.109375 -2.109375 5.359375 -1.757813 5.671875 -1.25 L 6.453125 0 L 4.890625 0 L 3.953125 -1.40625 C 3.617188 -1.90625 3.390625 -2.21875 3.265625 -2.34375 C 3.140625 -2.476563 3.007813 -2.566406 2.875 -2.609375 C 2.738281 -2.660156 2.519531 -2.6875 2.21875 -2.6875 L 1.953125 -2.6875 L 1.953125 0 Z M 1.953125 -3.71875 L 2.921875 -3.71875 C 3.546875 -3.71875 3.9375 -3.742188 4.09375 -3.796875 C 4.25 -3.847656 4.367188 -3.9375 4.453125 -4.0625 C 4.546875 -4.195313 4.59375 -4.359375 4.59375 -4.546875 C 4.59375 -4.765625 4.53125 -4.941406 4.40625 -5.078125 C 4.289063 -5.210938 4.128906 -5.296875 3.921875 -5.328125 C 3.816406 -5.347656 3.5 -5.359375 2.96875 -5.359375 L 1.953125 -5.359375 Z M 1.953125 -3.71875 "
id="path35" />
</g>
<g
id="glyph-0-12">
<path
d="M 0.359375 -2.40625 C 0.359375 -2.8125 0.457031 -3.207031 0.65625 -3.59375 C 0.863281 -3.976563 1.148438 -4.269531 1.515625 -4.46875 C 1.890625 -4.664063 2.304688 -4.765625 2.765625 -4.765625 C 3.472656 -4.765625 4.050781 -4.535156 4.5 -4.078125 C 4.945313 -3.617188 5.171875 -3.039063 5.171875 -2.34375 C 5.171875 -1.632813 4.941406 -1.046875 4.484375 -0.578125 C 4.035156 -0.117188 3.460938 0.109375 2.765625 0.109375 C 2.335938 0.109375 1.929688 0.015625 1.546875 -0.171875 C 1.160156 -0.367188 0.863281 -0.65625 0.65625 -1.03125 C 0.457031 -1.40625 0.359375 -1.863281 0.359375 -2.40625 Z M 1.625 -2.328125 C 1.625 -1.867188 1.734375 -1.515625 1.953125 -1.265625 C 2.171875 -1.023438 2.441406 -0.90625 2.765625 -0.90625 C 3.085938 -0.90625 3.359375 -1.023438 3.578125 -1.265625 C 3.796875 -1.515625 3.90625 -1.875 3.90625 -2.34375 C 3.90625 -2.800781 3.796875 -3.148438 3.578125 -3.390625 C 3.359375 -3.640625 3.085938 -3.765625 2.765625 -3.765625 C 2.441406 -3.765625 2.171875 -3.640625 1.953125 -3.390625 C 1.734375 -3.148438 1.625 -2.796875 1.625 -2.328125 Z M 1.625 -2.328125 "
id="path38" />
</g>
<g
id="glyph-0-13">
<path
d="M 3.71875 0 L 3.71875 -0.703125 C 3.550781 -0.453125 3.328125 -0.253906 3.046875 -0.109375 C 2.765625 0.0351563 2.472656 0.109375 2.171875 0.109375 C 1.859375 0.109375 1.578125 0.0390625 1.328125 -0.09375 C 1.078125 -0.238281 0.894531 -0.4375 0.78125 -0.6875 C 0.675781 -0.9375 0.625 -1.28125 0.625 -1.71875 L 0.625 -4.671875 L 1.859375 -4.671875 L 1.859375 -2.515625 C 1.859375 -1.859375 1.878906 -1.457031 1.921875 -1.3125 C 1.960938 -1.164063 2.039063 -1.046875 2.15625 -0.953125 C 2.28125 -0.867188 2.4375 -0.828125 2.625 -0.828125 C 2.832031 -0.828125 3.019531 -0.882813 3.1875 -1 C 3.363281 -1.125 3.476563 -1.269531 3.53125 -1.4375 C 3.59375 -1.613281 3.625 -2.035156 3.625 -2.703125 L 3.625 -4.671875 L 4.859375 -4.671875 L 4.859375 0 Z M 3.71875 0 "
id="path41" />
</g>
<g
id="glyph-0-14">
<path
d="M 2.78125 -4.671875 L 2.78125 -3.6875 L 1.9375 -3.6875 L 1.9375 -1.796875 C 1.9375 -1.421875 1.941406 -1.203125 1.953125 -1.140625 C 1.972656 -1.078125 2.007813 -1.023438 2.0625 -0.984375 C 2.125 -0.941406 2.195313 -0.921875 2.28125 -0.921875 C 2.394531 -0.921875 2.5625 -0.957031 2.78125 -1.03125 L 2.890625 -0.078125 C 2.597656 0.046875 2.269531 0.109375 1.90625 0.109375 C 1.6875 0.109375 1.488281 0.0703125 1.3125 0 C 1.132813 -0.0820313 1.003906 -0.179688 0.921875 -0.296875 C 0.835938 -0.410156 0.78125 -0.570313 0.75 -0.78125 C 0.71875 -0.925781 0.703125 -1.210938 0.703125 -1.640625 L 0.703125 -3.6875 L 0.140625 -3.6875 L 0.140625 -4.671875 L 0.703125 -4.671875 L 0.703125 -5.59375 L 1.9375 -6.3125 L 1.9375 -4.671875 Z M 2.78125 -4.671875 "
id="path44" />
</g>
<g
id="glyph-0-15">
<path
d="M 1.828125 0 L 0.59375 0 L 0.59375 -4.671875 L 1.734375 -4.671875 L 1.734375 -4 C 1.929688 -4.3125 2.109375 -4.515625 2.265625 -4.609375 C 2.421875 -4.710938 2.597656 -4.765625 2.796875 -4.765625 C 3.078125 -4.765625 3.347656 -4.691406 3.609375 -4.546875 L 3.234375 -3.46875 C 3.023438 -3.601563 2.832031 -3.671875 2.65625 -3.671875 C 2.476563 -3.671875 2.328125 -3.617188 2.203125 -3.515625 C 2.085938 -3.421875 1.992188 -3.25 1.921875 -3 C 1.859375 -2.75 1.828125 -2.226563 1.828125 -1.4375 Z M 1.828125 0 "
id="path47" />
</g>
<g
id="glyph-1-0">
<path
d="M 1.125 0 L 1.125 -5.625 L 5.625 -5.625 L 5.625 0 Z M 1.265625 -0.140625 L 5.484375 -0.140625 L 5.484375 -5.484375 L 1.265625 -5.484375 Z M 1.265625 -0.140625 "
id="path50" />
</g>
<g
id="glyph-1-1">
<path
d="M 3.78125 -1.5 L 4.609375 -1.40625 C 4.472656 -0.925781 4.226563 -0.550781 3.875 -0.28125 C 3.53125 -0.0195313 3.085938 0.109375 2.546875 0.109375 C 1.867188 0.109375 1.328125 -0.0976563 0.921875 -0.515625 C 0.523438 -0.941406 0.328125 -1.535156 0.328125 -2.296875 C 0.328125 -3.078125 0.53125 -3.679688 0.9375 -4.109375 C 1.34375 -4.546875 1.867188 -4.765625 2.515625 -4.765625 C 3.140625 -4.765625 3.644531 -4.550781 4.03125 -4.125 C 4.425781 -3.707031 4.625 -3.113281 4.625 -2.34375 C 4.625 -2.289063 4.625 -2.21875 4.625 -2.125 L 1.140625 -2.125 C 1.171875 -1.613281 1.316406 -1.222656 1.578125 -0.953125 C 1.835938 -0.679688 2.164063 -0.546875 2.5625 -0.546875 C 2.851563 -0.546875 3.097656 -0.617188 3.296875 -0.765625 C 3.503906 -0.921875 3.664063 -1.164063 3.78125 -1.5 Z M 1.1875 -2.78125 L 3.796875 -2.78125 C 3.765625 -3.175781 3.664063 -3.472656 3.5 -3.671875 C 3.25 -3.972656 2.921875 -4.125 2.515625 -4.125 C 2.148438 -4.125 1.84375 -4 1.59375 -3.75 C 1.351563 -3.507813 1.21875 -3.1875 1.1875 -2.78125 Z M 1.1875 -2.78125 "
id="path53" />
</g>
<g
id="glyph-1-2">
<path
d="M 2.328125 -0.703125 L 2.4375 -0.015625 C 2.207031 0.0351563 2.007813 0.0625 1.84375 0.0625 C 1.550781 0.0625 1.328125 0.015625 1.171875 -0.078125 C 1.015625 -0.171875 0.898438 -0.289063 0.828125 -0.4375 C 0.765625 -0.582031 0.734375 -0.890625 0.734375 -1.359375 L 0.734375 -4.046875 L 0.15625 -4.046875 L 0.15625 -4.671875 L 0.734375 -4.671875 L 0.734375 -5.828125 L 1.53125 -6.296875 L 1.53125 -4.671875 L 2.328125 -4.671875 L 2.328125 -4.046875 L 1.53125 -4.046875 L 1.53125 -1.328125 C 1.53125 -1.097656 1.539063 -0.953125 1.5625 -0.890625 C 1.59375 -0.828125 1.640625 -0.773438 1.703125 -0.734375 C 1.765625 -0.691406 1.851563 -0.671875 1.96875 -0.671875 C 2.0625 -0.671875 2.179688 -0.679688 2.328125 -0.703125 Z M 2.328125 -0.703125 "
id="path56" />
</g>
<g
id="glyph-1-3">
<path
d="M 0.59375 0 L 0.59375 -6.4375 L 1.390625 -6.4375 L 1.390625 -4.125 C 1.753906 -4.550781 2.21875 -4.765625 2.78125 -4.765625 C 3.125 -4.765625 3.421875 -4.695313 3.671875 -4.5625 C 3.929688 -4.425781 4.113281 -4.238281 4.21875 -4 C 4.332031 -3.757813 4.390625 -3.410156 4.390625 -2.953125 L 4.390625 0 L 3.609375 0 L 3.609375 -2.953125 C 3.609375 -3.347656 3.519531 -3.632813 3.34375 -3.8125 C 3.175781 -4 2.9375 -4.09375 2.625 -4.09375 C 2.382813 -4.09375 2.160156 -4.03125 1.953125 -3.90625 C 1.742188 -3.789063 1.597656 -3.628906 1.515625 -3.421875 C 1.429688 -3.210938 1.390625 -2.921875 1.390625 -2.546875 L 1.390625 0 Z M 0.59375 0 "
id="path59" />
</g>
<g
id="glyph-1-4">
<path
d="M 0.375 -3.171875 C 0.375 -3.929688 0.453125 -4.546875 0.609375 -5.015625 C 0.765625 -5.484375 0.992188 -5.84375 1.296875 -6.09375 C 1.609375 -6.34375 2 -6.46875 2.46875 -6.46875 C 2.820313 -6.46875 3.128906 -6.394531 3.390625 -6.25 C 3.648438 -6.113281 3.863281 -5.914063 4.03125 -5.65625 C 4.195313 -5.394531 4.328125 -5.078125 4.421875 -4.703125 C 4.523438 -4.328125 4.578125 -3.816406 4.578125 -3.171875 C 4.578125 -2.421875 4.5 -1.8125 4.34375 -1.34375 C 4.1875 -0.882813 3.953125 -0.523438 3.640625 -0.265625 C 3.335938 -0.015625 2.945313 0.109375 2.46875 0.109375 C 1.851563 0.109375 1.367188 -0.113281 1.015625 -0.5625 C 0.585938 -1.09375 0.375 -1.960938 0.375 -3.171875 Z M 1.1875 -3.171875 C 1.1875 -2.117188 1.304688 -1.414063 1.546875 -1.0625 C 1.796875 -0.71875 2.101563 -0.546875 2.46875 -0.546875 C 2.832031 -0.546875 3.140625 -0.71875 3.390625 -1.0625 C 3.640625 -1.414063 3.765625 -2.117188 3.765625 -3.171875 C 3.765625 -4.234375 3.640625 -4.9375 3.390625 -5.28125 C 3.140625 -5.632813 2.832031 -5.8125 2.46875 -5.8125 C 2.101563 -5.8125 1.8125 -5.660156 1.59375 -5.359375 C 1.320313 -4.960938 1.1875 -4.234375 1.1875 -3.171875 Z M 1.1875 -3.171875 "
id="path62" />
</g>
<g
id="glyph-1-5">
<path
d="M 0.8125 -3.765625 L 0.8125 -4.671875 L 1.71875 -4.671875 L 1.71875 -3.765625 Z M 0.8125 0 L 0.8125 -0.90625 L 1.71875 -0.90625 L 1.71875 0 Z M 0.8125 0 "
id="path65" />
</g>
<g
id="glyph-1-6">
<path
d="M 3.359375 0 L 2.5625 0 L 2.5625 -5.046875 C 2.375 -4.859375 2.125 -4.671875 1.8125 -4.484375 C 1.5 -4.304688 1.222656 -4.175781 0.984375 -4.09375 L 0.984375 -4.859375 C 1.421875 -5.054688 1.804688 -5.300781 2.140625 -5.59375 C 2.472656 -5.894531 2.707031 -6.1875 2.84375 -6.46875 L 3.359375 -6.46875 Z M 3.359375 0 "
id="path68" />
</g>
<g
id="glyph-1-7">
<path
d="M 4.53125 -0.765625 L 4.53125 0 L 0.265625 0 C 0.265625 -0.1875 0.296875 -0.367188 0.359375 -0.546875 C 0.472656 -0.835938 0.648438 -1.125 0.890625 -1.40625 C 1.128906 -1.6875 1.472656 -2.007813 1.921875 -2.375 C 2.617188 -2.957031 3.085938 -3.414063 3.328125 -3.75 C 3.578125 -4.082031 3.703125 -4.398438 3.703125 -4.703125 C 3.703125 -5.015625 3.585938 -5.273438 3.359375 -5.484375 C 3.140625 -5.703125 2.851563 -5.8125 2.5 -5.8125 C 2.113281 -5.8125 1.804688 -5.695313 1.578125 -5.46875 C 1.347656 -5.238281 1.234375 -4.921875 1.234375 -4.515625 L 0.421875 -4.609375 C 0.472656 -5.210938 0.679688 -5.671875 1.046875 -5.984375 C 1.410156 -6.304688 1.898438 -6.46875 2.515625 -6.46875 C 3.128906 -6.46875 3.613281 -6.296875 3.96875 -5.953125 C 4.332031 -5.609375 4.515625 -5.1875 4.515625 -4.6875 C 4.515625 -4.425781 4.460938 -4.171875 4.359375 -3.921875 C 4.253906 -3.671875 4.078125 -3.40625 3.828125 -3.125 C 3.585938 -2.851563 3.1875 -2.476563 2.625 -2 C 2.144531 -1.601563 1.835938 -1.332031 1.703125 -1.1875 C 1.566406 -1.039063 1.457031 -0.898438 1.375 -0.765625 Z M 4.53125 -0.765625 "
id="path71" />
</g>
<g
id="glyph-1-8">
<path
d="M 3.625 0 L 3.625 -0.59375 C 3.320313 -0.125 2.882813 0.109375 2.3125 0.109375 C 1.945313 0.109375 1.609375 0.00390625 1.296875 -0.203125 C 0.984375 -0.410156 0.738281 -0.695313 0.5625 -1.0625 C 0.394531 -1.425781 0.3125 -1.847656 0.3125 -2.328125 C 0.3125 -2.796875 0.390625 -3.21875 0.546875 -3.59375 C 0.703125 -3.976563 0.929688 -4.269531 1.234375 -4.46875 C 1.546875 -4.664063 1.894531 -4.765625 2.28125 -4.765625 C 2.5625 -4.765625 2.8125 -4.707031 3.03125 -4.59375 C 3.25 -4.476563 3.425781 -4.320313 3.5625 -4.125 L 3.5625 -6.4375 L 4.359375 -6.4375 L 4.359375 0 Z M 1.125 -2.328125 C 1.125 -1.734375 1.25 -1.285156 1.5 -0.984375 C 1.75 -0.691406 2.046875 -0.546875 2.390625 -0.546875 C 2.734375 -0.546875 3.023438 -0.6875 3.265625 -0.96875 C 3.515625 -1.25 3.640625 -1.679688 3.640625 -2.265625 C 3.640625 -2.898438 3.515625 -3.367188 3.265625 -3.671875 C 3.015625 -3.972656 2.710938 -4.125 2.359375 -4.125 C 2.003906 -4.125 1.707031 -3.976563 1.46875 -3.6875 C 1.238281 -3.394531 1.125 -2.941406 1.125 -2.328125 Z M 1.125 -2.328125 "
id="path74" />
</g>
<g
id="glyph-1-9">
<path
d="M 1.328125 0 L 0.59375 0 L 0.59375 -6.4375 L 1.375 -6.4375 L 1.375 -4.140625 C 1.707031 -4.554688 2.132813 -4.765625 2.65625 -4.765625 C 2.945313 -4.765625 3.21875 -4.707031 3.46875 -4.59375 C 3.726563 -4.476563 3.941406 -4.316406 4.109375 -4.109375 C 4.273438 -3.898438 4.40625 -3.644531 4.5 -3.34375 C 4.59375 -3.050781 4.640625 -2.738281 4.640625 -2.40625 C 4.640625 -1.601563 4.441406 -0.984375 4.046875 -0.546875 C 3.648438 -0.109375 3.175781 0.109375 2.625 0.109375 C 2.070313 0.109375 1.640625 -0.117188 1.328125 -0.578125 Z M 1.3125 -2.375 C 1.3125 -1.8125 1.390625 -1.40625 1.546875 -1.15625 C 1.796875 -0.75 2.128906 -0.546875 2.546875 -0.546875 C 2.898438 -0.546875 3.203125 -0.695313 3.453125 -1 C 3.703125 -1.300781 3.828125 -1.75 3.828125 -2.34375 C 3.828125 -2.945313 3.707031 -3.394531 3.46875 -3.6875 C 3.226563 -3.976563 2.9375 -4.125 2.59375 -4.125 C 2.238281 -4.125 1.9375 -3.972656 1.6875 -3.671875 C 1.4375 -3.367188 1.3125 -2.9375 1.3125 -2.375 Z M 1.3125 -2.375 "
id="path77" />
</g>
<g
id="glyph-1-10">
<path
d="M 1.59375 -3.5 C 1.257813 -3.613281 1.015625 -3.78125 0.859375 -4 C 0.703125 -4.226563 0.625 -4.5 0.625 -4.8125 C 0.625 -5.28125 0.789063 -5.671875 1.125 -5.984375 C 1.46875 -6.304688 1.914063 -6.46875 2.46875 -6.46875 C 3.03125 -6.46875 3.484375 -6.300781 3.828125 -5.96875 C 4.171875 -5.644531 4.34375 -5.25 4.34375 -4.78125 C 4.34375 -4.488281 4.265625 -4.226563 4.109375 -4 C 3.953125 -3.78125 3.710938 -3.613281 3.390625 -3.5 C 3.785156 -3.363281 4.085938 -3.148438 4.296875 -2.859375 C 4.503906 -2.578125 4.609375 -2.238281 4.609375 -1.84375 C 4.609375 -1.289063 4.410156 -0.828125 4.015625 -0.453125 C 3.628906 -0.078125 3.117188 0.109375 2.484375 0.109375 C 1.847656 0.109375 1.332031 -0.078125 0.9375 -0.453125 C 0.550781 -0.828125 0.359375 -1.296875 0.359375 -1.859375 C 0.359375 -2.273438 0.460938 -2.625 0.671875 -2.90625 C 0.890625 -3.195313 1.195313 -3.394531 1.59375 -3.5 Z M 1.4375 -4.828125 C 1.4375 -4.523438 1.53125 -4.273438 1.71875 -4.078125 C 1.914063 -3.890625 2.171875 -3.796875 2.484375 -3.796875 C 2.796875 -3.796875 3.046875 -3.890625 3.234375 -4.078125 C 3.429688 -4.273438 3.53125 -4.515625 3.53125 -4.796875 C 3.53125 -5.078125 3.429688 -5.316406 3.234375 -5.515625 C 3.035156 -5.710938 2.785156 -5.8125 2.484375 -5.8125 C 2.179688 -5.8125 1.929688 -5.710938 1.734375 -5.515625 C 1.535156 -5.328125 1.4375 -5.097656 1.4375 -4.828125 Z M 1.171875 -1.859375 C 1.171875 -1.628906 1.222656 -1.410156 1.328125 -1.203125 C 1.441406 -0.992188 1.601563 -0.832031 1.8125 -0.71875 C 2.019531 -0.601563 2.25 -0.546875 2.5 -0.546875 C 2.875 -0.546875 3.179688 -0.664063 3.421875 -0.90625 C 3.671875 -1.144531 3.796875 -1.453125 3.796875 -1.828125 C 3.796875 -2.210938 3.671875 -2.53125 3.421875 -2.78125 C 3.171875 -3.03125 2.851563 -3.15625 2.46875 -3.15625 C 2.09375 -3.15625 1.78125 -3.03125 1.53125 -2.78125 C 1.289063 -2.53125 1.171875 -2.222656 1.171875 -1.859375 Z M 1.171875 -1.859375 "
id="path80" />
</g>
<g
id="glyph-1-11">
<path
d="M 0 0.109375 L 1.875 -6.546875 L 2.5 -6.546875 L 0.640625 0.109375 Z M 0 0.109375 "
id="path83" />
</g>
<g
id="glyph-1-12">
<path
d="M 4.484375 -4.859375 L 3.6875 -4.796875 C 3.625 -5.109375 3.523438 -5.335938 3.390625 -5.484375 C 3.179688 -5.703125 2.921875 -5.8125 2.609375 -5.8125 C 2.347656 -5.8125 2.125 -5.742188 1.9375 -5.609375 C 1.6875 -5.421875 1.488281 -5.15625 1.34375 -4.8125 C 1.207031 -4.46875 1.132813 -3.972656 1.125 -3.328125 C 1.3125 -3.609375 1.539063 -3.816406 1.8125 -3.953125 C 2.09375 -4.097656 2.382813 -4.171875 2.6875 -4.171875 C 3.21875 -4.171875 3.664063 -3.976563 4.03125 -3.59375 C 4.40625 -3.207031 4.59375 -2.707031 4.59375 -2.09375 C 4.59375 -1.6875 4.503906 -1.304688 4.328125 -0.953125 C 4.148438 -0.609375 3.910156 -0.34375 3.609375 -0.15625 C 3.304688 0.0195313 2.960938 0.109375 2.578125 0.109375 C 1.921875 0.109375 1.382813 -0.128906 0.96875 -0.609375 C 0.550781 -1.097656 0.34375 -1.898438 0.34375 -3.015625 C 0.34375 -4.253906 0.570313 -5.160156 1.03125 -5.734375 C 1.425781 -6.222656 1.96875 -6.46875 2.65625 -6.46875 C 3.15625 -6.46875 3.566406 -6.320313 3.890625 -6.03125 C 4.210938 -5.75 4.410156 -5.359375 4.484375 -4.859375 Z M 1.25 -2.09375 C 1.25 -1.8125 1.304688 -1.546875 1.421875 -1.296875 C 1.535156 -1.054688 1.695313 -0.867188 1.90625 -0.734375 C 2.113281 -0.609375 2.332031 -0.546875 2.5625 -0.546875 C 2.894531 -0.546875 3.179688 -0.675781 3.421875 -0.9375 C 3.660156 -1.207031 3.78125 -1.578125 3.78125 -2.046875 C 3.78125 -2.492188 3.660156 -2.84375 3.421875 -3.09375 C 3.191406 -3.351563 2.894531 -3.484375 2.53125 -3.484375 C 2.175781 -3.484375 1.875 -3.351563 1.625 -3.09375 C 1.375 -2.84375 1.25 -2.507813 1.25 -2.09375 Z M 1.25 -2.09375 "
id="path86" />
</g>
<g
id="glyph-1-13">
<path
d="M 2.90625 0 L 2.90625 -1.546875 L 0.109375 -1.546875 L 0.109375 -2.265625 L 3.046875 -6.4375 L 3.703125 -6.4375 L 3.703125 -2.265625 L 4.578125 -2.265625 L 4.578125 -1.546875 L 3.703125 -1.546875 L 3.703125 0 Z M 2.90625 -2.265625 L 2.90625 -5.171875 L 0.890625 -2.265625 Z M 2.90625 -2.265625 "
id="path89" />
</g>
</g>
<clipPath
id="clip-0">
<path
clip-rule="nonzero"
d="M 0 56 L 168 56 L 168 69.75 L 0 69.75 Z M 0 56 "
id="path94" />
</clipPath>
</defs>
<path
fill-rule="nonzero"
fill="rgb(100%, 94.898987%, 79.998779%)"
fill-opacity="1"
stroke-width="1"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(83.918762%, 71.369934%, 33.729553%)"
stroke-opacity="1"
stroke-miterlimit="4"
d="M 1 0.5 L 81.000003 0.5 L 81.000003 49.000002 L 1 49.000002 Z M 1 0.5 "
transform="matrix(0.75, 0, 0, 0.75, 0.375, 0.375)"
id="path99" />
<g
fill="#000000"
fill-opacity="1"
id="g115">
<use
xlink:href="#glyph-0-1"
x="12.738281"
y="17.249998"
id="use101" />
<use
xlink:href="#glyph-0-2"
x="17.743652"
y="17.249998"
id="use103" />
<use
xlink:href="#glyph-0-3"
x="22.749022"
y="17.249998"
id="use105" />
<use
xlink:href="#glyph-0-4"
x="27.754393"
y="17.249998"
id="use107" />
<use
xlink:href="#glyph-0-5"
x="35.756832"
y="17.249998"
id="use109" />
<use
xlink:href="#glyph-0-6"
x="41.254395"
y="17.249998"
id="use111" />
<use
xlink:href="#glyph-0-1"
x="43.754883"
y="17.249998"
id="use113" />
</g>
<g
fill="#000000"
fill-opacity="1"
id="g125">
<use
xlink:href="#glyph-1-1"
x="21.234373"
y="32.25"
id="use117" />
<use
xlink:href="#glyph-1-2"
x="26.239744"
y="32.25"
id="use119" />
<use
xlink:href="#glyph-1-3"
x="28.740232"
y="32.25"
id="use121" />
<use
xlink:href="#glyph-1-4"
x="33.745605"
y="32.25"
id="use123" />
</g>
<path
fill="none"
stroke-width="1"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(0%, 0%, 0%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 41.000002 89.000004 L 41.000002 49.000002 "
transform="matrix(0.75, 0, 0, 0.75, 0.375, 0.375)"
id="path127" />
<g
clip-path="url(#clip-0)"
id="g131">
<path
fill="none"
stroke-width="1"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="#000000"
stroke-opacity="1"
stroke-miterlimit="10"
d="m 1,89.000004 219.00001,1.5"
transform="matrix(0.75,0,0,0.75,0.375,0.375)"
id="path129" />
</g>
<path
fill-rule="nonzero"
fill="rgb(100%, 100%, 100%)"
fill-opacity="1"
stroke-width="1"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(0%, 0%, 0%)"
stroke-opacity="1"
stroke-miterlimit="4"
d="M 140.000006 0.5 L 220.000009 0.5 L 220.000009 50.500002 L 140.000006 50.500002 Z M 140.000006 0.5 "
transform="matrix(0.75, 0, 0, 0.75, 0.375, 0.375)"
id="path133" />
<g
fill="#000000"
fill-opacity="1"
id="g143">
<use
xlink:href="#glyph-0-7"
x="125.73046"
y="16.499998"
id="use135" />
<use
xlink:href="#glyph-0-8"
x="128.23096"
y="16.499998"
id="use137" />
<use
xlink:href="#glyph-0-9"
x="134.23389"
y="16.499998"
id="use139" />
<use
xlink:href="#glyph-0-10"
x="139.23926"
y="16.499998"
id="use141" />
</g>
<g
fill="#000000"
fill-opacity="1"
id="g157">
<use
xlink:href="#glyph-0-11"
x="120.49218"
y="27.749998"
id="use145" />
<use
xlink:href="#glyph-0-12"
x="126.99169"
y="27.749998"
id="use147" />
<use
xlink:href="#glyph-0-13"
x="132.48926"
y="27.749998"
id="use149" />
<use
xlink:href="#glyph-0-14"
x="137.98682"
y="27.749998"
id="use151" />
<use
xlink:href="#glyph-0-1"
x="140.98389"
y="27.749998"
id="use153" />
<use
xlink:href="#glyph-0-15"
x="145.98926"
y="27.749998"
id="use155" />
</g>
<path
fill="none"
stroke-width="1"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(0%, 0%, 0%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 182.000008 90.000004 L 182.000008 50.000002 "
transform="matrix(0.75, 0, 0, 0.75, 0.375, 0.375)"
id="path159" />
<g
fill="#000000"
fill-opacity="1"
id="g167">
<use
xlink:href="#glyph-1-5"
x="138.99609"
y="49.499996"
id="use161" />
<use
xlink:href="#glyph-1-5"
x="141.49658"
y="49.499996"
id="use163" />
<use
xlink:href="#glyph-1-6"
x="143.99707"
y="49.499996"
id="use165" />
</g>
<g
fill="#000000"
fill-opacity="1"
id="g205">
<use
xlink:href="#glyph-1-7"
x="52.464844"
y="60.749996"
id="use169" />
<use
xlink:href="#glyph-1-4"
x="57.470211"
y="60.749996"
id="use171" />
<use
xlink:href="#glyph-1-4"
x="62.475582"
y="60.749996"
id="use173" />
<use
xlink:href="#glyph-1-6"
x="67.480957"
y="60.749996"
id="use175" />
<use
xlink:href="#glyph-1-5"
x="72.486328"
y="60.749996"
id="use177" />
<use
xlink:href="#glyph-1-8"
x="74.986816"
y="60.749996"
id="use179" />
<use
xlink:href="#glyph-1-9"
x="79.992188"
y="60.749996"
id="use181" />
<use
xlink:href="#glyph-1-10"
x="84.997559"
y="60.749996"
id="use183" />
<use
xlink:href="#glyph-1-5"
x="90.00293"
y="60.749996"
id="use185" />
<use
xlink:href="#glyph-1-4"
x="92.50341"
y="60.749996"
id="use187" />
<use
xlink:href="#glyph-1-5"
x="97.508781"
y="60.749996"
id="use189" />
<use
xlink:href="#glyph-1-6"
x="100.00927"
y="60.749996"
id="use191" />
<use
xlink:href="#glyph-1-5"
x="105.01464"
y="60.749996"
id="use193" />
<use
xlink:href="#glyph-1-5"
x="107.51513"
y="60.749996"
id="use195" />
<use
xlink:href="#glyph-1-4"
x="110.01562"
y="60.749996"
id="use197" />
<use
xlink:href="#glyph-1-11"
x="115.02099"
y="60.749996"
id="use199" />
<use
xlink:href="#glyph-1-12"
x="117.52148"
y="60.749996"
id="use201" />
<use
xlink:href="#glyph-1-13"
x="122.52685"
y="60.749996"
id="use203" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 33 KiB

+338
View File
@@ -0,0 +1,338 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="145.919998pt"
height="73.919998pt"
viewBox="0 0 145.919998 73.919998"
version="1.1"
id="svg139"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs67">
<g
id="g65">
<g
id="glyph-0-0">
<path
d="M 1.125 0 L 1.125 -5.640625 L 5.640625 -5.640625 L 5.640625 0 Z M 1.265625 -0.140625 L 5.5 -0.140625 L 5.5 -5.5 L 1.265625 -5.5 Z M 1.265625 -0.140625 "
id="path2" />
</g>
<g
id="glyph-0-1">
<path
d="M 3.359375 -1.484375 L 4.59375 -1.28125 C 4.4375 -0.832031 4.1875 -0.488281 3.84375 -0.25 C 3.5 -0.0078125 3.070313 0.109375 2.5625 0.109375 C 1.75 0.109375 1.144531 -0.15625 0.75 -0.6875 C 0.4375 -1.113281 0.28125 -1.65625 0.28125 -2.3125 C 0.28125 -3.082031 0.484375 -3.6875 0.890625 -4.125 C 1.296875 -4.5625 1.8125 -4.78125 2.4375 -4.78125 C 3.132813 -4.78125 3.679688 -4.550781 4.078125 -4.09375 C 4.484375 -3.632813 4.675781 -2.929688 4.65625 -1.984375 L 1.5625 -1.984375 C 1.5625 -1.617188 1.65625 -1.332031 1.84375 -1.125 C 2.039063 -0.914063 2.285156 -0.8125 2.578125 -0.8125 C 2.765625 -0.8125 2.925781 -0.863281 3.0625 -0.96875 C 3.195313 -1.082031 3.296875 -1.253906 3.359375 -1.484375 Z M 3.4375 -2.75 C 3.425781 -3.101563 3.332031 -3.375 3.15625 -3.5625 C 2.976563 -3.75 2.765625 -3.84375 2.515625 -3.84375 C 2.242188 -3.84375 2.019531 -3.742188 1.84375 -3.546875 C 1.664063 -3.347656 1.578125 -3.082031 1.578125 -2.75 Z M 3.4375 -2.75 "
id="path5" />
</g>
<g
id="glyph-0-2">
<path
d="M 0.046875 0 L 1.734375 -2.40625 L 0.125 -4.6875 L 1.640625 -4.6875 L 2.46875 -3.390625 L 3.34375 -4.6875 L 4.796875 -4.6875 L 3.203125 -2.46875 L 4.9375 0 L 3.421875 0 L 2.46875 -1.453125 L 1.5 0 Z M 0.046875 0 "
id="path8" />
</g>
<g
id="glyph-0-3">
<path
d="M 1.578125 -3.25 L 0.453125 -3.453125 C 0.578125 -3.910156 0.789063 -4.242188 1.09375 -4.453125 C 1.40625 -4.671875 1.867188 -4.78125 2.484375 -4.78125 C 3.035156 -4.78125 3.445313 -4.710938 3.71875 -4.578125 C 3.988281 -4.453125 4.175781 -4.289063 4.28125 -4.09375 C 4.394531 -3.894531 4.453125 -3.523438 4.453125 -2.984375 L 4.4375 -1.53125 C 4.4375 -1.125 4.457031 -0.820313 4.5 -0.625 C 4.539063 -0.425781 4.613281 -0.21875 4.71875 0 L 3.5 0 C 3.457031 -0.0820313 3.414063 -0.203125 3.375 -0.359375 C 3.351563 -0.429688 3.335938 -0.484375 3.328125 -0.515625 C 3.117188 -0.304688 2.890625 -0.148438 2.640625 -0.046875 C 2.398438 0.0546875 2.144531 0.109375 1.875 0.109375 C 1.394531 0.109375 1.015625 -0.0195313 0.734375 -0.28125 C 0.460938 -0.539063 0.328125 -0.875 0.328125 -1.28125 C 0.328125 -1.539063 0.390625 -1.773438 0.515625 -1.984375 C 0.640625 -2.191406 0.816406 -2.347656 1.046875 -2.453125 C 1.273438 -2.566406 1.601563 -2.664063 2.03125 -2.75 C 2.601563 -2.863281 3.003906 -2.96875 3.234375 -3.0625 L 3.234375 -3.171875 C 3.234375 -3.410156 3.171875 -3.582031 3.046875 -3.6875 C 2.929688 -3.789063 2.710938 -3.84375 2.390625 -3.84375 C 2.171875 -3.84375 2 -3.796875 1.875 -3.703125 C 1.75 -3.617188 1.648438 -3.46875 1.578125 -3.25 Z M 3.234375 -2.25 C 3.078125 -2.195313 2.828125 -2.132813 2.484375 -2.0625 C 2.140625 -1.988281 1.910156 -1.914063 1.796875 -1.84375 C 1.640625 -1.726563 1.5625 -1.582031 1.5625 -1.40625 C 1.5625 -1.226563 1.625 -1.078125 1.75 -0.953125 C 1.882813 -0.828125 2.050781 -0.765625 2.25 -0.765625 C 2.46875 -0.765625 2.679688 -0.835938 2.890625 -0.984375 C 3.035156 -1.097656 3.132813 -1.234375 3.1875 -1.390625 C 3.21875 -1.503906 3.234375 -1.707031 3.234375 -2 Z M 3.234375 -2.25 "
id="path11" />
</g>
<g
id="glyph-0-4">
<path
d="M 0.5625 -4.6875 L 1.703125 -4.6875 L 1.703125 -4.046875 C 2.109375 -4.535156 2.59375 -4.78125 3.15625 -4.78125 C 3.457031 -4.78125 3.71875 -4.71875 3.9375 -4.59375 C 4.15625 -4.476563 4.335938 -4.296875 4.484375 -4.046875 C 4.679688 -4.296875 4.898438 -4.476563 5.140625 -4.59375 C 5.378906 -4.71875 5.632813 -4.78125 5.90625 -4.78125 C 6.25 -4.78125 6.539063 -4.710938 6.78125 -4.578125 C 7.019531 -4.441406 7.195313 -4.238281 7.3125 -3.96875 C 7.394531 -3.769531 7.4375 -3.445313 7.4375 -3 L 7.4375 0 L 6.203125 0 L 6.203125 -2.671875 C 6.203125 -3.140625 6.160156 -3.441406 6.078125 -3.578125 C 5.960938 -3.753906 5.785156 -3.84375 5.546875 -3.84375 C 5.367188 -3.84375 5.203125 -3.785156 5.046875 -3.671875 C 4.898438 -3.566406 4.789063 -3.410156 4.71875 -3.203125 C 4.65625 -3.003906 4.625 -2.6875 4.625 -2.25 L 4.625 0 L 3.390625 0 L 3.390625 -2.5625 C 3.390625 -3.019531 3.363281 -3.3125 3.3125 -3.4375 C 3.269531 -3.570313 3.203125 -3.671875 3.109375 -3.734375 C 3.023438 -3.804688 2.898438 -3.84375 2.734375 -3.84375 C 2.546875 -3.84375 2.375 -3.789063 2.21875 -3.6875 C 2.070313 -3.582031 1.960938 -3.429688 1.890625 -3.234375 C 1.828125 -3.046875 1.796875 -2.726563 1.796875 -2.28125 L 1.796875 0 L 0.5625 0 Z M 0.5625 -4.6875 "
id="path14" />
</g>
<g
id="glyph-0-5">
<path
d="M 0.609375 -4.6875 L 1.765625 -4.6875 L 1.765625 -4 C 1.921875 -4.226563 2.125 -4.414063 2.375 -4.5625 C 2.632813 -4.707031 2.921875 -4.78125 3.234375 -4.78125 C 3.773438 -4.78125 4.234375 -4.566406 4.609375 -4.140625 C 4.992188 -3.722656 5.1875 -3.132813 5.1875 -2.375 C 5.1875 -1.582031 4.992188 -0.96875 4.609375 -0.53125 C 4.222656 -0.101563 3.757813 0.109375 3.21875 0.109375 C 2.957031 0.109375 2.722656 0.0546875 2.515625 -0.046875 C 2.304688 -0.148438 2.085938 -0.328125 1.859375 -0.578125 L 1.859375 1.78125 L 0.609375 1.78125 Z M 1.84375 -2.421875 C 1.84375 -1.890625 1.945313 -1.5 2.15625 -1.25 C 2.363281 -1 2.617188 -0.875 2.921875 -0.875 C 3.203125 -0.875 3.4375 -0.988281 3.625 -1.21875 C 3.820313 -1.445313 3.921875 -1.828125 3.921875 -2.359375 C 3.921875 -2.847656 3.820313 -3.210938 3.625 -3.453125 C 3.425781 -3.691406 3.179688 -3.8125 2.890625 -3.8125 C 2.585938 -3.8125 2.335938 -3.691406 2.140625 -3.453125 C 1.941406 -3.222656 1.84375 -2.878906 1.84375 -2.421875 Z M 1.84375 -2.421875 "
id="path17" />
</g>
<g
id="glyph-0-6">
<path
d="M 0.640625 0 L 0.640625 -6.46875 L 1.890625 -6.46875 L 1.890625 0 Z M 0.640625 0 "
id="path20" />
</g>
<g
id="glyph-1-0">
<path
d="M 1.125 0 L 1.125 -5.640625 L 5.640625 -5.640625 L 5.640625 0 Z M 1.265625 -0.140625 L 5.5 -0.140625 L 5.5 -5.5 L 1.265625 -5.5 Z M 1.265625 -0.140625 "
id="path23" />
</g>
<g
id="glyph-1-1">
<path
d="M 3.796875 -1.515625 L 4.625 -1.40625 C 4.488281 -0.925781 4.242188 -0.550781 3.890625 -0.28125 C 3.546875 -0.0195313 3.101563 0.109375 2.5625 0.109375 C 1.875 0.109375 1.328125 -0.0976563 0.921875 -0.515625 C 0.523438 -0.941406 0.328125 -1.535156 0.328125 -2.296875 C 0.328125 -3.085938 0.53125 -3.695313 0.9375 -4.125 C 1.34375 -4.5625 1.867188 -4.78125 2.515625 -4.78125 C 3.140625 -4.78125 3.648438 -4.566406 4.046875 -4.140625 C 4.441406 -3.722656 4.640625 -3.125 4.640625 -2.34375 C 4.640625 -2.300781 4.640625 -2.234375 4.640625 -2.140625 L 1.15625 -2.140625 C 1.175781 -1.617188 1.316406 -1.222656 1.578125 -0.953125 C 1.847656 -0.679688 2.175781 -0.546875 2.5625 -0.546875 C 2.851563 -0.546875 3.101563 -0.617188 3.3125 -0.765625 C 3.519531 -0.921875 3.679688 -1.171875 3.796875 -1.515625 Z M 1.1875 -2.796875 L 3.8125 -2.796875 C 3.769531 -3.179688 3.671875 -3.472656 3.515625 -3.671875 C 3.253906 -3.984375 2.925781 -4.140625 2.53125 -4.140625 C 2.164063 -4.140625 1.859375 -4.015625 1.609375 -3.765625 C 1.359375 -3.523438 1.21875 -3.203125 1.1875 -2.796875 Z M 1.1875 -2.796875 "
id="path26" />
</g>
<g
id="glyph-1-2">
<path
d="M 2.328125 -0.703125 L 2.4375 -0.015625 C 2.21875 0.0351563 2.019531 0.0625 1.84375 0.0625 C 1.550781 0.0625 1.328125 0.015625 1.171875 -0.078125 C 1.015625 -0.171875 0.898438 -0.289063 0.828125 -0.4375 C 0.765625 -0.582031 0.734375 -0.894531 0.734375 -1.375 L 0.734375 -4.0625 L 0.15625 -4.0625 L 0.15625 -4.6875 L 0.734375 -4.6875 L 0.734375 -5.84375 L 1.53125 -6.3125 L 1.53125 -4.6875 L 2.328125 -4.6875 L 2.328125 -4.0625 L 1.53125 -4.0625 L 1.53125 -1.328125 C 1.53125 -1.097656 1.539063 -0.953125 1.5625 -0.890625 C 1.59375 -0.828125 1.640625 -0.773438 1.703125 -0.734375 C 1.765625 -0.691406 1.859375 -0.671875 1.984375 -0.671875 C 2.066406 -0.671875 2.179688 -0.679688 2.328125 -0.703125 Z M 2.328125 -0.703125 "
id="path29" />
</g>
<g
id="glyph-1-3">
<path
d="M 0.59375 0 L 0.59375 -6.46875 L 1.390625 -6.46875 L 1.390625 -4.140625 C 1.753906 -4.566406 2.222656 -4.78125 2.796875 -4.78125 C 3.140625 -4.78125 3.4375 -4.710938 3.6875 -4.578125 C 3.945313 -4.441406 4.128906 -4.253906 4.234375 -4.015625 C 4.347656 -3.773438 4.40625 -3.425781 4.40625 -2.96875 L 4.40625 0 L 3.609375 0 L 3.609375 -2.96875 C 3.609375 -3.363281 3.519531 -3.648438 3.34375 -3.828125 C 3.175781 -4.015625 2.9375 -4.109375 2.625 -4.109375 C 2.394531 -4.109375 2.175781 -4.046875 1.96875 -3.921875 C 1.757813 -3.796875 1.609375 -3.628906 1.515625 -3.421875 C 1.429688 -3.210938 1.390625 -2.925781 1.390625 -2.5625 L 1.390625 0 Z M 0.59375 0 "
id="path32" />
</g>
<g
id="glyph-1-4">
<path
d="M 0.375 -3.1875 C 0.375 -3.945313 0.453125 -4.5625 0.609375 -5.03125 C 0.765625 -5.5 1 -5.859375 1.3125 -6.109375 C 1.625 -6.359375 2.015625 -6.484375 2.484375 -6.484375 C 2.828125 -6.484375 3.128906 -6.414063 3.390625 -6.28125 C 3.648438 -6.144531 3.863281 -5.941406 4.03125 -5.671875 C 4.207031 -5.410156 4.34375 -5.09375 4.4375 -4.71875 C 4.539063 -4.34375 4.59375 -3.832031 4.59375 -3.1875 C 4.59375 -2.425781 4.515625 -1.8125 4.359375 -1.34375 C 4.203125 -0.882813 3.96875 -0.523438 3.65625 -0.265625 C 3.34375 -0.015625 2.953125 0.109375 2.484375 0.109375 C 1.859375 0.109375 1.367188 -0.113281 1.015625 -0.5625 C 0.585938 -1.09375 0.375 -1.96875 0.375 -3.1875 Z M 1.1875 -3.1875 C 1.1875 -2.125 1.3125 -1.414063 1.5625 -1.0625 C 1.8125 -0.71875 2.117188 -0.546875 2.484375 -0.546875 C 2.847656 -0.546875 3.15625 -0.71875 3.40625 -1.0625 C 3.65625 -1.414063 3.78125 -2.125 3.78125 -3.1875 C 3.78125 -4.25 3.65625 -4.953125 3.40625 -5.296875 C 3.15625 -5.648438 2.84375 -5.828125 2.46875 -5.828125 C 2.101563 -5.828125 1.8125 -5.675781 1.59375 -5.375 C 1.320313 -4.976563 1.1875 -4.25 1.1875 -3.1875 Z M 1.1875 -3.1875 "
id="path35" />
</g>
<g
id="glyph-1-5">
<path
d="M 4.546875 -0.765625 L 4.546875 0 L 0.265625 0 C 0.265625 -0.1875 0.296875 -0.367188 0.359375 -0.546875 C 0.472656 -0.835938 0.648438 -1.125 0.890625 -1.40625 C 1.128906 -1.6875 1.472656 -2.015625 1.921875 -2.390625 C 2.628906 -2.960938 3.101563 -3.414063 3.34375 -3.75 C 3.59375 -4.09375 3.71875 -4.414063 3.71875 -4.71875 C 3.71875 -5.03125 3.601563 -5.289063 3.375 -5.5 C 3.15625 -5.71875 2.863281 -5.828125 2.5 -5.828125 C 2.125 -5.828125 1.820313 -5.710938 1.59375 -5.484375 C 1.363281 -5.253906 1.242188 -4.9375 1.234375 -4.53125 L 0.421875 -4.625 C 0.472656 -5.226563 0.679688 -5.6875 1.046875 -6 C 1.410156 -6.320313 1.898438 -6.484375 2.515625 -6.484375 C 3.140625 -6.484375 3.628906 -6.3125 3.984375 -5.96875 C 4.347656 -5.625 4.53125 -5.203125 4.53125 -4.703125 C 4.53125 -4.441406 4.476563 -4.1875 4.375 -3.9375 C 4.269531 -3.6875 4.09375 -3.421875 3.84375 -3.140625 C 3.601563 -2.867188 3.195313 -2.488281 2.625 -2 C 2.144531 -1.601563 1.835938 -1.332031 1.703125 -1.1875 C 1.578125 -1.050781 1.46875 -0.910156 1.375 -0.765625 Z M 4.546875 -0.765625 "
id="path38" />
</g>
<g
id="glyph-1-6">
<path
d="M 3.359375 0 L 2.578125 0 L 2.578125 -5.0625 C 2.378906 -4.875 2.125 -4.6875 1.8125 -4.5 C 1.507813 -4.320313 1.234375 -4.1875 0.984375 -4.09375 L 0.984375 -4.875 C 1.429688 -5.082031 1.816406 -5.332031 2.140625 -5.625 C 2.472656 -5.925781 2.710938 -6.210938 2.859375 -6.484375 L 3.359375 -6.484375 Z M 3.359375 0 "
id="path41" />
</g>
<g
id="glyph-1-7">
<path
d="M 0.8125 -3.78125 L 0.8125 -4.6875 L 1.71875 -4.6875 L 1.71875 -3.78125 Z M 0.8125 0 L 0.8125 -0.90625 L 1.71875 -0.90625 L 1.71875 0 Z M 0.8125 0 "
id="path44" />
</g>
<g
id="glyph-1-8">
<path
d="M 3.640625 0 L 3.640625 -0.59375 C 3.335938 -0.125 2.898438 0.109375 2.328125 0.109375 C 1.953125 0.109375 1.609375 0.00390625 1.296875 -0.203125 C 0.984375 -0.410156 0.738281 -0.695313 0.5625 -1.0625 C 0.394531 -1.4375 0.3125 -1.863281 0.3125 -2.34375 C 0.3125 -2.800781 0.390625 -3.222656 0.546875 -3.609375 C 0.703125 -3.992188 0.9375 -4.285156 1.25 -4.484375 C 1.5625 -4.679688 1.90625 -4.78125 2.28125 -4.78125 C 2.570313 -4.78125 2.828125 -4.722656 3.046875 -4.609375 C 3.265625 -4.492188 3.441406 -4.335938 3.578125 -4.140625 L 3.578125 -6.46875 L 4.375 -6.46875 L 4.375 0 Z M 1.125 -2.34375 C 1.125 -1.738281 1.25 -1.285156 1.5 -0.984375 C 1.757813 -0.691406 2.0625 -0.546875 2.40625 -0.546875 C 2.75 -0.546875 3.039063 -0.6875 3.28125 -0.96875 C 3.519531 -1.25 3.640625 -1.679688 3.640625 -2.265625 C 3.640625 -2.910156 3.515625 -3.378906 3.265625 -3.671875 C 3.023438 -3.972656 2.722656 -4.125 2.359375 -4.125 C 2.003906 -4.125 1.707031 -3.976563 1.46875 -3.6875 C 1.238281 -3.40625 1.125 -2.957031 1.125 -2.34375 Z M 1.125 -2.34375 "
id="path47" />
</g>
<g
id="glyph-1-9">
<path
d="M 1.328125 0 L 0.59375 0 L 0.59375 -6.46875 L 1.390625 -6.46875 L 1.390625 -4.15625 C 1.722656 -4.570313 2.148438 -4.78125 2.671875 -4.78125 C 2.953125 -4.78125 3.222656 -4.722656 3.484375 -4.609375 C 3.742188 -4.492188 3.957031 -4.332031 4.125 -4.125 C 4.289063 -3.914063 4.421875 -3.660156 4.515625 -3.359375 C 4.609375 -3.066406 4.65625 -2.75 4.65625 -2.40625 C 4.65625 -1.601563 4.457031 -0.984375 4.0625 -0.546875 C 3.664063 -0.109375 3.1875 0.109375 2.625 0.109375 C 2.070313 0.109375 1.640625 -0.125 1.328125 -0.59375 Z M 1.3125 -2.375 C 1.3125 -1.8125 1.390625 -1.40625 1.546875 -1.15625 C 1.796875 -0.75 2.132813 -0.546875 2.5625 -0.546875 C 2.90625 -0.546875 3.203125 -0.695313 3.453125 -1 C 3.710938 -1.300781 3.84375 -1.75 3.84375 -2.34375 C 3.84375 -2.957031 3.71875 -3.410156 3.46875 -3.703125 C 3.226563 -3.992188 2.9375 -4.140625 2.59375 -4.140625 C 2.25 -4.140625 1.945313 -3.988281 1.6875 -3.6875 C 1.4375 -3.382813 1.3125 -2.945313 1.3125 -2.375 Z M 1.3125 -2.375 "
id="path50" />
</g>
<g
id="glyph-1-10">
<path
d="M 1.59375 -3.5 C 1.269531 -3.625 1.023438 -3.796875 0.859375 -4.015625 C 0.703125 -4.242188 0.625 -4.515625 0.625 -4.828125 C 0.625 -5.296875 0.789063 -5.6875 1.125 -6 C 1.46875 -6.320313 1.921875 -6.484375 2.484375 -6.484375 C 3.046875 -6.484375 3.5 -6.320313 3.84375 -6 C 4.1875 -5.675781 4.359375 -5.273438 4.359375 -4.796875 C 4.359375 -4.503906 4.28125 -4.242188 4.125 -4.015625 C 3.96875 -3.796875 3.726563 -3.625 3.40625 -3.5 C 3.800781 -3.375 4.101563 -3.164063 4.3125 -2.875 C 4.519531 -2.59375 4.625 -2.25 4.625 -1.84375 C 4.625 -1.289063 4.425781 -0.828125 4.03125 -0.453125 C 3.644531 -0.078125 3.132813 0.109375 2.5 0.109375 C 1.851563 0.109375 1.332031 -0.078125 0.9375 -0.453125 C 0.550781 -0.828125 0.359375 -1.300781 0.359375 -1.875 C 0.359375 -2.289063 0.460938 -2.640625 0.671875 -2.921875 C 0.890625 -3.203125 1.195313 -3.394531 1.59375 -3.5 Z M 1.4375 -4.84375 C 1.4375 -4.539063 1.535156 -4.289063 1.734375 -4.09375 C 1.929688 -3.90625 2.1875 -3.8125 2.5 -3.8125 C 2.800781 -3.8125 3.050781 -3.90625 3.25 -4.09375 C 3.445313 -4.289063 3.546875 -4.53125 3.546875 -4.8125 C 3.546875 -5.101563 3.441406 -5.347656 3.234375 -5.546875 C 3.035156 -5.742188 2.785156 -5.84375 2.484375 -5.84375 C 2.179688 -5.84375 1.929688 -5.742188 1.734375 -5.546875 C 1.535156 -5.347656 1.4375 -5.113281 1.4375 -4.84375 Z M 1.1875 -1.859375 C 1.1875 -1.640625 1.238281 -1.421875 1.34375 -1.203125 C 1.445313 -0.992188 1.601563 -0.832031 1.8125 -0.71875 C 2.03125 -0.601563 2.257813 -0.546875 2.5 -0.546875 C 2.882813 -0.546875 3.195313 -0.664063 3.4375 -0.90625 C 3.6875 -1.15625 3.8125 -1.46875 3.8125 -1.84375 C 3.8125 -2.21875 3.679688 -2.53125 3.421875 -2.78125 C 3.171875 -3.03125 2.859375 -3.15625 2.484375 -3.15625 C 2.109375 -3.15625 1.796875 -3.03125 1.546875 -2.78125 C 1.304688 -2.539063 1.1875 -2.234375 1.1875 -1.859375 Z M 1.1875 -1.859375 "
id="path53" />
</g>
<g
id="glyph-1-11">
<path
d="M 0 0.109375 L 1.875 -6.578125 L 2.515625 -6.578125 L 0.640625 0.109375 Z M 0 0.109375 "
id="path56" />
</g>
<g
id="glyph-1-12">
<path
d="M 4.5 -4.875 L 3.703125 -4.8125 C 3.628906 -5.125 3.53125 -5.351563 3.40625 -5.5 C 3.1875 -5.726563 2.921875 -5.84375 2.609375 -5.84375 C 2.359375 -5.84375 2.132813 -5.769531 1.9375 -5.625 C 1.6875 -5.445313 1.488281 -5.179688 1.34375 -4.828125 C 1.207031 -4.472656 1.132813 -3.972656 1.125 -3.328125 C 1.320313 -3.617188 1.554688 -3.832031 1.828125 -3.96875 C 2.109375 -4.113281 2.398438 -4.1875 2.703125 -4.1875 C 3.234375 -4.1875 3.679688 -3.992188 4.046875 -3.609375 C 4.421875 -3.222656 4.609375 -2.71875 4.609375 -2.09375 C 4.609375 -1.6875 4.519531 -1.3125 4.34375 -0.96875 C 4.164063 -0.625 3.925781 -0.359375 3.625 -0.171875 C 3.320313 0.015625 2.972656 0.109375 2.578125 0.109375 C 1.921875 0.109375 1.382813 -0.128906 0.96875 -0.609375 C 0.550781 -1.097656 0.34375 -1.90625 0.34375 -3.03125 C 0.34375 -4.28125 0.570313 -5.1875 1.03125 -5.75 C 1.4375 -6.238281 1.976563 -6.484375 2.65625 -6.484375 C 3.164063 -6.484375 3.582031 -6.34375 3.90625 -6.0625 C 4.226563 -5.78125 4.425781 -5.382813 4.5 -4.875 Z M 1.25 -2.09375 C 1.25 -1.820313 1.304688 -1.5625 1.421875 -1.3125 C 1.535156 -1.0625 1.695313 -0.867188 1.90625 -0.734375 C 2.125 -0.609375 2.347656 -0.546875 2.578125 -0.546875 C 2.910156 -0.546875 3.195313 -0.679688 3.4375 -0.953125 C 3.675781 -1.222656 3.796875 -1.585938 3.796875 -2.046875 C 3.796875 -2.492188 3.675781 -2.847656 3.4375 -3.109375 C 3.195313 -3.367188 2.898438 -3.5 2.546875 -3.5 C 2.179688 -3.5 1.875 -3.367188 1.625 -3.109375 C 1.375 -2.847656 1.25 -2.507813 1.25 -2.09375 Z M 1.25 -2.09375 "
id="path59" />
</g>
<g
id="glyph-1-13">
<path
d="M 2.921875 0 L 2.921875 -1.546875 L 0.109375 -1.546875 L 0.109375 -2.28125 L 3.0625 -6.46875 L 3.71875 -6.46875 L 3.71875 -2.28125 L 4.59375 -2.28125 L 4.59375 -1.546875 L 3.71875 -1.546875 L 3.71875 0 Z M 2.921875 -2.28125 L 2.921875 -5.1875 L 0.890625 -2.28125 Z M 2.921875 -2.28125 "
id="path62" />
</g>
</g>
</defs>
<path
fill-rule="nonzero"
fill="rgb(100%, 94.898987%, 79.998779%)"
fill-opacity="1"
stroke-width="1"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(83.918762%, 71.369934%, 33.729553%)"
stroke-opacity="1"
stroke-miterlimit="4"
d="M 1.000054 1.000054 L 81.001187 1.000054 L 81.001187 51.000113 L 1.000054 51.000113 Z M 1.000054 1.000054 "
transform="matrix(0.752577, 0, 0, 0.752577, 0.376289, 0.376289)"
id="path69" />
<g
fill="#000000"
fill-opacity="1"
id="g85">
<use
xlink:href="#glyph-0-1"
x="12.782054"
y="18.81443"
id="use71" />
<use
xlink:href="#glyph-0-2"
x="17.804625"
y="18.81443"
id="use73" />
<use
xlink:href="#glyph-0-3"
x="22.827196"
y="18.81443"
id="use75" />
<use
xlink:href="#glyph-0-4"
x="27.849768"
y="18.81443"
id="use77" />
<use
xlink:href="#glyph-0-5"
x="35.879707"
y="18.81443"
id="use79" />
<use
xlink:href="#glyph-0-6"
x="41.396156"
y="18.81443"
id="use81" />
<use
xlink:href="#glyph-0-1"
x="43.905239"
y="18.81443"
id="use83" />
</g>
<g
fill="#000000"
fill-opacity="1"
id="g95">
<use
xlink:href="#glyph-1-1"
x="21.307343"
y="33.865974"
id="use87" />
<use
xlink:href="#glyph-1-2"
x="26.329914"
y="33.865974"
id="use89" />
<use
xlink:href="#glyph-1-3"
x="28.838995"
y="33.865974"
id="use91" />
<use
xlink:href="#glyph-1-4"
x="33.861565"
y="33.865974"
id="use93" />
</g>
<path
fill="none"
stroke-width="1"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(0%, 0%, 0%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 40.998025 90.998084 L 40.998025 51.000113 "
transform="matrix(0.752577, 0, 0, 0.752577, 0.376289, 0.376289)"
id="path97" />
<path
fill="none"
stroke-width="1"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(0%, 0%, 0%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 1.000054 90.998084 L 190.998203 90.998084 "
transform="matrix(0.752577, 0, 0, 0.752577, 0.376289, 0.376289)"
id="path99" />
<g
fill="#000000"
fill-opacity="1"
id="g129">
<use
xlink:href="#glyph-1-5"
x="59.430084"
y="62.463909"
id="use101" />
<use
xlink:href="#glyph-1-4"
x="64.452652"
y="62.463909"
id="use103" />
<use
xlink:href="#glyph-1-4"
x="69.475227"
y="62.463909"
id="use105" />
<use
xlink:href="#glyph-1-6"
x="74.497795"
y="62.463909"
id="use107" />
<use
xlink:href="#glyph-1-7"
x="79.52037"
y="62.463909"
id="use109" />
<use
xlink:href="#glyph-1-8"
x="82.029449"
y="62.463909"
id="use111" />
<use
xlink:href="#glyph-1-9"
x="87.052017"
y="62.463909"
id="use113" />
<use
xlink:href="#glyph-1-10"
x="92.074593"
y="62.463909"
id="use115" />
<use
xlink:href="#glyph-1-7"
x="97.09716"
y="62.463909"
id="use117" />
<use
xlink:href="#glyph-1-7"
x="99.606239"
y="62.463909"
id="use119" />
<use
xlink:href="#glyph-1-4"
x="102.11533"
y="62.463909"
id="use121" />
<use
xlink:href="#glyph-1-11"
x="107.13789"
y="62.463909"
id="use123" />
<use
xlink:href="#glyph-1-12"
x="109.64697"
y="62.463909"
id="use125" />
<use
xlink:href="#glyph-1-13"
x="114.66955"
y="62.463909"
id="use127" />
</g>
<g
fill="#000000"
fill-opacity="1"
id="g137">
<use
xlink:href="#glyph-1-7"
x="17.556215"
y="48.917519"
id="use131" />
<use
xlink:href="#glyph-1-7"
x="20.065296"
y="48.917519"
id="use133" />
<use
xlink:href="#glyph-1-6"
x="22.574377"
y="48.917519"
id="use135" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 23 KiB

+478
View File
@@ -0,0 +1,478 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="234pt"
height="155.039993pt"
viewBox="0 0 234 155.039993"
version="1.1"
id="svg141"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs53">
<g
id="g48">
<g
id="glyph-0-0" />
<g
id="glyph-0-1">
<path
d="M 4.078125 0.15625 C 3.578125 0.15625 3.117188 0.078125 2.703125 -0.078125 C 2.296875 -0.234375 1.945313 -0.460938 1.65625 -0.765625 C 1.363281 -1.066406 1.132813 -1.4375 0.96875 -1.875 C 0.8125 -2.320313 0.734375 -2.832031 0.734375 -3.40625 C 0.734375 -3.988281 0.816406 -4.503906 0.984375 -4.953125 C 1.148438 -5.398438 1.375 -5.773438 1.65625 -6.078125 C 1.9375 -6.390625 2.269531 -6.625 2.65625 -6.78125 C 3.039063 -6.9375 3.453125 -7.015625 3.890625 -7.015625 C 4.273438 -7.015625 4.632813 -6.945313 4.96875 -6.8125 C 5.3125 -6.6875 5.609375 -6.488281 5.859375 -6.21875 C 6.109375 -5.957031 6.304688 -5.625 6.453125 -5.21875 C 6.597656 -4.8125 6.671875 -4.328125 6.671875 -3.765625 C 6.671875 -3.679688 6.664063 -3.597656 6.65625 -3.515625 C 6.65625 -3.429688 6.648438 -3.347656 6.640625 -3.265625 L 1.765625 -3.265625 C 1.785156 -2.828125 1.859375 -2.445313 1.984375 -2.125 C 2.117188 -1.800781 2.289063 -1.535156 2.5 -1.328125 C 2.707031 -1.117188 2.945313 -0.960938 3.21875 -0.859375 C 3.5 -0.765625 3.796875 -0.71875 4.109375 -0.71875 C 4.347656 -0.71875 4.570313 -0.742188 4.78125 -0.796875 C 4.988281 -0.859375 5.1875 -0.945313 5.375 -1.0625 C 5.5625 -1.175781 5.726563 -1.316406 5.875 -1.484375 L 6.484375 -0.90625 C 6.285156 -0.675781 6.0625 -0.476563 5.8125 -0.3125 C 5.570313 -0.15625 5.304688 -0.0390625 5.015625 0.03125 C 4.734375 0.113281 4.421875 0.15625 4.078125 0.15625 Z M 1.8125 -4.109375 L 5.578125 -4.109375 C 5.578125 -4.429688 5.535156 -4.71875 5.453125 -4.96875 C 5.367188 -5.226563 5.25 -5.445313 5.09375 -5.625 C 4.9375 -5.8125 4.75 -5.953125 4.53125 -6.046875 C 4.320313 -6.140625 4.082031 -6.1875 3.8125 -6.1875 C 3.570313 -6.1875 3.34375 -6.144531 3.125 -6.0625 C 2.914063 -5.988281 2.71875 -5.863281 2.53125 -5.6875 C 2.351563 -5.519531 2.203125 -5.304688 2.078125 -5.046875 C 1.953125 -4.785156 1.863281 -4.472656 1.8125 -4.109375 Z M 1.8125 -4.109375 "
id="path3" />
</g>
<g
id="glyph-0-2">
<path
d="M 4.484375 0.109375 C 4.046875 0.109375 3.6875 0.0351563 3.40625 -0.109375 C 3.125 -0.265625 2.90625 -0.5 2.75 -0.8125 C 2.601563 -1.132813 2.507813 -1.535156 2.46875 -2.015625 C 2.425781 -2.492188 2.414063 -3.0625 2.4375 -3.71875 L 2.609375 -8.609375 L 3.734375 -8.75 L 3.890625 -8.765625 L 3.90625 -8.65625 C 3.851563 -8.582031 3.804688 -8.507813 3.765625 -8.4375 C 3.734375 -8.375 3.707031 -8.253906 3.6875 -8.078125 L 3.5625 -6.390625 L 3.59375 -6.125 L 3.5 -3.640625 C 3.46875 -2.878906 3.484375 -2.289063 3.546875 -1.875 C 3.617188 -1.46875 3.742188 -1.1875 3.921875 -1.03125 C 4.109375 -0.875 4.351563 -0.796875 4.65625 -0.796875 C 4.976563 -0.796875 5.265625 -0.859375 5.515625 -0.984375 C 5.773438 -1.117188 6.046875 -1.285156 6.328125 -1.484375 L 6.65625 -0.625 C 6.320313 -0.375 5.972656 -0.1875 5.609375 -0.0625 C 5.242188 0.0507813 4.867188 0.109375 4.484375 0.109375 Z M 1.046875 -6.859375 L 5.984375 -6.859375 L 5.984375 -5.96875 L 1.046875 -5.96875 Z M 1.046875 -6.859375 "
id="path6" />
</g>
<g
id="glyph-0-3">
<path
d="M 1.09375 -9.96875 L 2.28125 -9.96875 L 2.28125 -9.875 C 2.21875 -9.8125 2.175781 -9.742188 2.15625 -9.671875 C 2.144531 -9.597656 2.140625 -9.476563 2.140625 -9.3125 L 2.140625 -5.640625 C 2.328125 -5.921875 2.539063 -6.160156 2.78125 -6.359375 C 3.03125 -6.566406 3.289063 -6.726563 3.5625 -6.84375 C 3.832031 -6.957031 4.109375 -7.015625 4.390625 -7.015625 C 4.804688 -7.015625 5.171875 -6.921875 5.484375 -6.734375 C 5.796875 -6.546875 6.039063 -6.238281 6.21875 -5.8125 C 6.394531 -5.394531 6.484375 -4.84375 6.484375 -4.15625 L 6.484375 0 L 5.4375 0 L 5.4375 -4.125 C 5.4375 -4.601563 5.378906 -4.984375 5.265625 -5.265625 C 5.148438 -5.554688 5 -5.765625 4.8125 -5.890625 C 4.625 -6.015625 4.410156 -6.078125 4.171875 -6.078125 C 3.992188 -6.078125 3.804688 -6.046875 3.609375 -5.984375 C 3.421875 -5.921875 3.238281 -5.828125 3.0625 -5.703125 C 2.894531 -5.585938 2.738281 -5.441406 2.59375 -5.265625 C 2.457031 -5.097656 2.347656 -4.898438 2.265625 -4.671875 C 2.179688 -4.453125 2.140625 -4.207031 2.140625 -3.9375 L 2.140625 0 L 1.09375 0 Z M 1.09375 -9.96875 "
id="path9" />
</g>
<g
id="glyph-0-4">
<path
d="M 1.609375 -2.3125 L 5.609375 -7.453125 L 5.953125 -6.75 L 1.953125 -1.671875 Z M 3.75 0.171875 C 3.125 0.171875 2.597656 -0.0078125 2.171875 -0.375 C 1.742188 -0.75 1.414063 -1.296875 1.1875 -2.015625 C 0.96875 -2.734375 0.859375 -3.601563 0.859375 -4.625 C 0.859375 -5.613281 0.96875 -6.460938 1.1875 -7.171875 C 1.414063 -7.890625 1.742188 -8.441406 2.171875 -8.828125 C 2.597656 -9.210938 3.125 -9.40625 3.75 -9.40625 C 4.375 -9.40625 4.898438 -9.210938 5.328125 -8.828125 C 5.753906 -8.441406 6.078125 -7.890625 6.296875 -7.171875 C 6.523438 -6.460938 6.640625 -5.613281 6.640625 -4.625 C 6.640625 -3.601563 6.523438 -2.734375 6.296875 -2.015625 C 6.078125 -1.296875 5.753906 -0.75 5.328125 -0.375 C 4.898438 -0.0078125 4.375 0.171875 3.75 0.171875 Z M 3.75 -0.75 C 4.125 -0.75 4.445313 -0.898438 4.71875 -1.203125 C 4.988281 -1.503906 5.195313 -1.941406 5.34375 -2.515625 C 5.488281 -3.085938 5.5625 -3.789063 5.5625 -4.625 C 5.5625 -5.414063 5.488281 -6.097656 5.34375 -6.671875 C 5.195313 -7.242188 4.988281 -7.6875 4.71875 -8 C 4.445313 -8.320313 4.125 -8.484375 3.75 -8.484375 C 3.375 -8.484375 3.050781 -8.320313 2.78125 -8 C 2.507813 -7.6875 2.300781 -7.242188 2.15625 -6.671875 C 2.007813 -6.097656 1.9375 -5.414063 1.9375 -4.625 C 1.9375 -3.789063 2.007813 -3.085938 2.15625 -2.515625 C 2.300781 -1.941406 2.507813 -1.503906 2.78125 -1.203125 C 3.050781 -0.898438 3.375 -0.75 3.75 -0.75 Z M 3.75 -0.75 "
id="path12" />
</g>
<g
id="glyph-0-5">
<path
d="M 1.5 0 L 1.5 -0.875 L 3.25 -0.875 L 3.25 -5.984375 L 1.59375 -5.984375 L 1.59375 -6.859375 L 4.328125 -6.859375 L 4.328125 -0.875 L 5.9375 -0.875 L 5.9375 0 Z M 3.734375 -8.296875 C 3.523438 -8.296875 3.34375 -8.367188 3.1875 -8.515625 C 3.039063 -8.671875 2.96875 -8.851563 2.96875 -9.0625 C 2.96875 -9.28125 3.039063 -9.460938 3.1875 -9.609375 C 3.332031 -9.765625 3.515625 -9.84375 3.734375 -9.84375 C 3.941406 -9.84375 4.125 -9.765625 4.28125 -9.609375 C 4.4375 -9.453125 4.515625 -9.269531 4.515625 -9.0625 C 4.515625 -8.851563 4.4375 -8.671875 4.28125 -8.515625 C 4.125 -8.367188 3.941406 -8.296875 3.734375 -8.296875 Z M 3.734375 -8.296875 "
id="path15" />
</g>
<g
id="glyph-0-6">
<path
d="M 0.90625 2.5 L 0.90625 -6.859375 L 2 -6.859375 L 2 -5.5 C 2.101563 -5.851563 2.257813 -6.140625 2.46875 -6.359375 C 2.675781 -6.578125 2.914063 -6.738281 3.1875 -6.84375 C 3.457031 -6.945313 3.753906 -7 4.078125 -7 C 4.460938 -7 4.828125 -6.925781 5.171875 -6.78125 C 5.515625 -6.632813 5.816406 -6.414063 6.078125 -6.125 C 6.347656 -5.84375 6.554688 -5.476563 6.703125 -5.03125 C 6.859375 -4.59375 6.9375 -4.078125 6.9375 -3.484375 C 6.9375 -2.878906 6.851563 -2.347656 6.6875 -1.890625 C 6.53125 -1.429688 6.3125 -1.046875 6.03125 -0.734375 C 5.757813 -0.429688 5.453125 -0.203125 5.109375 -0.046875 C 4.765625 0.109375 4.410156 0.1875 4.046875 0.1875 C 3.773438 0.1875 3.507813 0.140625 3.25 0.046875 C 3 -0.0351563 2.769531 -0.15625 2.5625 -0.3125 C 2.351563 -0.476563 2.171875 -0.675781 2.015625 -0.90625 L 2.015625 2.5 Z M 3.875 -0.78125 C 4.113281 -0.78125 4.347656 -0.820313 4.578125 -0.90625 C 4.804688 -0.988281 5.015625 -1.128906 5.203125 -1.328125 C 5.390625 -1.535156 5.535156 -1.8125 5.640625 -2.15625 C 5.753906 -2.5 5.8125 -2.925781 5.8125 -3.4375 C 5.8125 -3.988281 5.742188 -4.457031 5.609375 -4.84375 C 5.472656 -5.226563 5.269531 -5.523438 5 -5.734375 C 4.738281 -5.941406 4.414063 -6.054688 4.03125 -6.078125 C 3.75 -6.097656 3.484375 -6.054688 3.234375 -5.953125 C 2.992188 -5.859375 2.78125 -5.691406 2.59375 -5.453125 C 2.40625 -5.222656 2.257813 -4.921875 2.15625 -4.546875 C 2.050781 -4.171875 2 -3.71875 2 -3.1875 C 2.007813 -2.875 2.039063 -2.585938 2.09375 -2.328125 C 2.15625 -2.066406 2.238281 -1.835938 2.34375 -1.640625 C 2.457031 -1.441406 2.585938 -1.28125 2.734375 -1.15625 C 2.890625 -1.03125 3.0625 -0.9375 3.25 -0.875 C 3.445313 -0.8125 3.65625 -0.78125 3.875 -0.78125 Z M 3.875 -0.78125 "
id="path18" />
</g>
<g
id="glyph-0-7">
<path
d="M 1.1875 0 L 1.1875 -0.875 L 3.203125 -0.875 L 3.203125 -9.109375 L 1.28125 -9.109375 L 1.28125 -9.96875 L 4.3125 -9.96875 L 4.3125 -0.875 L 6.3125 -0.875 L 6.3125 0 Z M 1.1875 0 "
id="path21" />
</g>
<g
id="glyph-0-8">
<path
d="M 3.75 0.125 C 3.125 0.125 2.570313 -0.0234375 2.09375 -0.328125 C 1.625 -0.640625 1.253906 -1.0625 0.984375 -1.59375 C 0.710938 -2.132813 0.578125 -2.75 0.578125 -3.4375 C 0.578125 -4.132813 0.710938 -4.75 0.984375 -5.28125 C 1.253906 -5.820313 1.625 -6.242188 2.09375 -6.546875 C 2.570313 -6.847656 3.125 -7 3.75 -7 C 4.375 -7 4.921875 -6.847656 5.390625 -6.546875 C 5.867188 -6.242188 6.242188 -5.820313 6.515625 -5.28125 C 6.785156 -4.75 6.921875 -4.132813 6.921875 -3.4375 C 6.921875 -2.75 6.785156 -2.132813 6.515625 -1.59375 C 6.242188 -1.0625 5.867188 -0.640625 5.390625 -0.328125 C 4.921875 -0.0234375 4.375 0.125 3.75 0.125 Z M 3.75 -0.78125 C 4.144531 -0.78125 4.492188 -0.894531 4.796875 -1.125 C 5.097656 -1.351563 5.335938 -1.664063 5.515625 -2.0625 C 5.691406 -2.46875 5.78125 -2.929688 5.78125 -3.453125 C 5.78125 -3.972656 5.691406 -4.429688 5.515625 -4.828125 C 5.335938 -5.234375 5.097656 -5.546875 4.796875 -5.765625 C 4.492188 -5.992188 4.144531 -6.109375 3.75 -6.109375 C 3.363281 -6.109375 3.015625 -5.992188 2.703125 -5.765625 C 2.398438 -5.546875 2.160156 -5.234375 1.984375 -4.828125 C 1.804688 -4.429688 1.71875 -3.972656 1.71875 -3.453125 C 1.71875 -2.929688 1.804688 -2.46875 1.984375 -2.0625 C 2.160156 -1.664063 2.398438 -1.351563 2.703125 -1.125 C 3.015625 -0.894531 3.363281 -0.78125 3.75 -0.78125 Z M 3.75 -0.78125 "
id="path24" />
</g>
<g
id="glyph-1-0">
<path
d="M 1.6875 0 L 1.6875 -8.4375 L 8.4375 -8.4375 L 8.4375 0 Z M 1.90625 -0.21875 L 8.234375 -0.21875 L 8.234375 -8.234375 L 1.90625 -8.234375 Z M 1.90625 -0.21875 "
id="path27" />
</g>
<g
id="glyph-1-1">
<path
d="M 5.015625 -2.234375 L 6.875 -1.921875 C 6.632813 -1.242188 6.257813 -0.726563 5.75 -0.375 C 5.238281 -0.0195313 4.597656 0.15625 3.828125 0.15625 C 2.609375 0.15625 1.707031 -0.238281 1.125 -1.03125 C 0.65625 -1.664063 0.421875 -2.472656 0.421875 -3.453125 C 0.421875 -4.609375 0.722656 -5.515625 1.328125 -6.171875 C 1.941406 -6.828125 2.710938 -7.15625 3.640625 -7.15625 C 4.679688 -7.15625 5.5 -6.8125 6.09375 -6.125 C 6.695313 -5.4375 6.988281 -4.382813 6.96875 -2.96875 L 2.328125 -2.96875 C 2.335938 -2.414063 2.484375 -1.984375 2.765625 -1.671875 C 3.054688 -1.367188 3.414063 -1.21875 3.84375 -1.21875 C 4.132813 -1.21875 4.378906 -1.296875 4.578125 -1.453125 C 4.773438 -1.617188 4.921875 -1.878906 5.015625 -2.234375 Z M 5.125 -4.09375 C 5.113281 -4.632813 4.972656 -5.039063 4.703125 -5.3125 C 4.441406 -5.59375 4.125 -5.734375 3.75 -5.734375 C 3.34375 -5.734375 3.007813 -5.585938 2.75 -5.296875 C 2.488281 -5.003906 2.359375 -4.601563 2.359375 -4.09375 Z M 5.125 -4.09375 "
id="path30" />
</g>
<g
id="glyph-1-2">
<path
d="M 0.078125 0 L 2.609375 -3.609375 L 0.1875 -7 L 2.453125 -7 L 3.6875 -5.078125 L 4.984375 -7 L 7.171875 -7 L 4.796875 -3.6875 L 7.390625 0 L 5.109375 0 L 3.6875 -2.171875 L 2.25 0 Z M 0.078125 0 "
id="path33" />
</g>
<g
id="glyph-1-3">
<path
d="M 2.359375 -4.859375 L 0.671875 -5.171875 C 0.859375 -5.847656 1.179688 -6.347656 1.640625 -6.671875 C 2.109375 -6.992188 2.796875 -7.15625 3.703125 -7.15625 C 4.523438 -7.15625 5.140625 -7.054688 5.546875 -6.859375 C 5.953125 -6.671875 6.238281 -6.425781 6.40625 -6.125 C 6.570313 -5.820313 6.65625 -5.269531 6.65625 -4.46875 L 6.625 -2.296875 C 6.625 -1.679688 6.65625 -1.226563 6.71875 -0.9375 C 6.78125 -0.644531 6.890625 -0.332031 7.046875 0 L 5.21875 0 C 5.164063 -0.125 5.109375 -0.304688 5.046875 -0.546875 C 5.015625 -0.660156 4.992188 -0.734375 4.984375 -0.765625 C 4.660156 -0.453125 4.316406 -0.21875 3.953125 -0.0625 C 3.597656 0.0820313 3.21875 0.15625 2.8125 0.15625 C 2.09375 0.15625 1.523438 -0.0351563 1.109375 -0.421875 C 0.691406 -0.816406 0.484375 -1.3125 0.484375 -1.90625 C 0.484375 -2.300781 0.578125 -2.65625 0.765625 -2.96875 C 0.953125 -3.28125 1.210938 -3.515625 1.546875 -3.671875 C 1.890625 -3.835938 2.382813 -3.984375 3.03125 -4.109375 C 3.894531 -4.273438 4.492188 -4.425781 4.828125 -4.5625 L 4.828125 -4.75 C 4.828125 -5.101563 4.738281 -5.351563 4.5625 -5.5 C 4.382813 -5.65625 4.054688 -5.734375 3.578125 -5.734375 C 3.242188 -5.734375 2.984375 -5.671875 2.796875 -5.546875 C 2.617188 -5.421875 2.472656 -5.191406 2.359375 -4.859375 Z M 4.828125 -3.359375 C 4.585938 -3.285156 4.210938 -3.191406 3.703125 -3.078125 C 3.191406 -2.960938 2.859375 -2.851563 2.703125 -2.75 C 2.453125 -2.582031 2.328125 -2.367188 2.328125 -2.109375 C 2.328125 -1.847656 2.421875 -1.617188 2.609375 -1.421875 C 2.804688 -1.234375 3.054688 -1.140625 3.359375 -1.140625 C 3.691406 -1.140625 4.007813 -1.253906 4.3125 -1.484375 C 4.539063 -1.648438 4.691406 -1.851563 4.765625 -2.09375 C 4.804688 -2.25 4.828125 -2.550781 4.828125 -3 Z M 4.828125 -3.359375 "
id="path36" />
</g>
<g
id="glyph-1-4">
<path
d="M 0.828125 -7 L 2.53125 -7 L 2.53125 -6.046875 C 3.144531 -6.785156 3.875 -7.15625 4.71875 -7.15625 C 5.164063 -7.15625 5.550781 -7.0625 5.875 -6.875 C 6.207031 -6.695313 6.484375 -6.421875 6.703125 -6.046875 C 7.003906 -6.421875 7.332031 -6.695313 7.6875 -6.875 C 8.050781 -7.0625 8.429688 -7.15625 8.828125 -7.15625 C 9.347656 -7.15625 9.785156 -7.050781 10.140625 -6.84375 C 10.492188 -6.632813 10.757813 -6.328125 10.9375 -5.921875 C 11.0625 -5.628906 11.125 -5.144531 11.125 -4.46875 L 11.125 0 L 9.28125 0 L 9.28125 -4 C 9.28125 -4.695313 9.210938 -5.144531 9.078125 -5.34375 C 8.910156 -5.601563 8.648438 -5.734375 8.296875 -5.734375 C 8.035156 -5.734375 7.789063 -5.65625 7.5625 -5.5 C 7.332031 -5.34375 7.164063 -5.109375 7.0625 -4.796875 C 6.96875 -4.492188 6.921875 -4.015625 6.921875 -3.359375 L 6.921875 0 L 5.0625 0 L 5.0625 -3.84375 C 5.0625 -4.519531 5.023438 -4.957031 4.953125 -5.15625 C 4.890625 -5.351563 4.789063 -5.5 4.65625 -5.59375 C 4.519531 -5.6875 4.332031 -5.734375 4.09375 -5.734375 C 3.8125 -5.734375 3.554688 -5.65625 3.328125 -5.5 C 3.097656 -5.351563 2.929688 -5.132813 2.828125 -4.84375 C 2.734375 -4.550781 2.6875 -4.070313 2.6875 -3.40625 L 2.6875 0 L 0.828125 0 Z M 0.828125 -7 "
id="path39" />
</g>
<g
id="glyph-1-5">
<path
d="M 0.921875 -7 L 2.640625 -7 L 2.640625 -5.96875 C 2.867188 -6.320313 3.171875 -6.609375 3.546875 -6.828125 C 3.929688 -7.046875 4.359375 -7.15625 4.828125 -7.15625 C 5.640625 -7.15625 6.328125 -6.835938 6.890625 -6.203125 C 7.460938 -5.566406 7.75 -4.679688 7.75 -3.546875 C 7.75 -2.367188 7.460938 -1.457031 6.890625 -0.8125 C 6.316406 -0.164063 5.625 0.15625 4.8125 0.15625 C 4.425781 0.15625 4.078125 0.0820313 3.765625 -0.0625 C 3.453125 -0.21875 3.117188 -0.484375 2.765625 -0.859375 L 2.765625 2.65625 L 0.921875 2.65625 Z M 2.75 -3.625 C 2.75 -2.832031 2.90625 -2.25 3.21875 -1.875 C 3.53125 -1.5 3.910156 -1.3125 4.359375 -1.3125 C 4.785156 -1.3125 5.140625 -1.484375 5.421875 -1.828125 C 5.710938 -2.171875 5.859375 -2.738281 5.859375 -3.53125 C 5.859375 -4.257813 5.710938 -4.800781 5.421875 -5.15625 C 5.128906 -5.519531 4.765625 -5.703125 4.328125 -5.703125 C 3.867188 -5.703125 3.488281 -5.523438 3.1875 -5.171875 C 2.894531 -4.816406 2.75 -4.300781 2.75 -3.625 Z M 2.75 -3.625 "
id="path42" />
</g>
<g
id="glyph-1-6">
<path
d="M 0.96875 0 L 0.96875 -9.65625 L 2.828125 -9.65625 L 2.828125 0 Z M 0.96875 0 "
id="path45" />
</g>
</g>
<clipPath
id="clip-0">
<path
clip-rule="nonzero"
d="M 72 118 L 94 118 L 94 153 L 72 153 Z M 72 118 "
id="path50" />
</clipPath>
</defs>
<path
fill-rule="nonzero"
fill="rgb(100%, 94.898987%, 79.998779%)"
fill-opacity="1"
stroke-width="1"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(83.918762%, 71.369934%, 33.729553%)"
stroke-opacity="1"
stroke-miterlimit="4"
d="M 40.000002 1 L 310.000013 1 L 310.000013 201.000008 L 40.000002 201.000008 Z M 40.000002 1 "
transform="matrix(0.75, 0, 0, 0.75, 0.375, 0.375)"
id="path55" />
<path
fill-rule="nonzero"
fill="rgb(97.24884%, 80.778503%, 79.998779%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(72.158813%, 32.939148%, 31.369019%)"
stroke-opacity="1"
stroke-miterlimit="4"
d="M 70.000003 122.000005 L 150.000006 122.000005 L 150.000006 162.000007 L 70.000003 162.000007 Z M 70.000003 122.000005 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path57" />
<g
fill="#000000"
fill-opacity="1"
id="g67">
<use
xlink:href="#glyph-0-1"
x="67.5"
y="111.74999"
id="use59" />
<use
xlink:href="#glyph-0-2"
x="75"
y="111.74999"
id="use61" />
<use
xlink:href="#glyph-0-3"
x="82.5"
y="111.74999"
id="use63" />
<use
xlink:href="#glyph-0-4"
x="89.999992"
y="111.74999"
id="use65" />
</g>
<path
fill-rule="nonzero"
fill="rgb(97.24884%, 80.778503%, 79.998779%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(72.158813%, 32.939148%, 31.369019%)"
stroke-opacity="1"
stroke-miterlimit="4"
d="M 120.000005 112.000005 L 140.000006 112.000005 L 140.000006 122.000005 L 120.000005 122.000005 Z M 120.000005 112.000005 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path69" />
<path
fill-rule="nonzero"
fill="rgb(97.24884%, 80.778503%, 79.998779%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(72.158813%, 32.939148%, 31.369019%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 85.000005 116.999996 C 91.666672 116.999996 95.000006 120.333329 95.000006 126.999996 C 95.000006 133.666663 91.666672 136.999997 85.000005 136.999997 Z M 85.000005 116.999996 "
transform="matrix(0, 0.75, -0.75, 0, 162.749993, 27.749999)"
id="path71" />
<path
fill="none"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(72.158813%, 32.939148%, 31.369019%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 80.000003 167.000007 L 140.000006 167.000007 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path73" />
<path
fill-rule="nonzero"
fill="rgb(96.078491%, 96.078491%, 96.078491%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="4"
d="M 110.000005 76.000003 C 110.000005 77.312503 109.869796 78.614587 109.614588 79.901045 C 109.35938 81.187503 108.979171 82.442712 108.479171 83.656253 C 107.973963 84.864587 107.359379 86.020837 106.630213 87.109379 C 105.901046 88.203129 105.072921 89.213545 104.140629 90.140629 C 103.213546 91.07292 102.203129 91.901045 101.109379 92.630212 C 100.020838 93.359379 98.864587 93.973962 97.656254 94.479171 C 96.442712 94.979171 95.187504 95.359379 93.901046 95.614587 C 92.614587 95.869796 91.312504 96.000004 90.000004 96.000004 C 88.687504 96.000004 87.38542 95.869796 86.098962 95.614587 C 84.812504 95.359379 83.557295 94.979171 82.343753 94.479171 C 81.13542 93.973962 79.97917 93.359379 78.890628 92.630212 C 77.796878 91.901045 76.786462 91.07292 75.859378 90.140629 C 74.927086 89.213545 74.098961 88.203129 73.369795 87.109379 C 72.640628 86.020837 72.026045 84.864587 71.520836 83.656253 C 71.020836 82.442712 70.640628 81.187503 70.38542 79.901045 C 70.130211 78.614587 70.000003 77.312503 70.000003 76.000003 C 70.000003 74.687503 70.130211 73.38542 70.38542 72.098961 C 70.640628 70.812503 71.020836 69.557295 71.520836 68.343753 C 72.026045 67.135419 72.640628 65.979169 73.369795 64.890628 C 74.098961 63.796878 74.927086 62.786461 75.859378 61.859378 C 76.786462 60.927086 77.796878 60.098961 78.890628 59.369794 C 79.97917 58.640627 81.13542 58.026044 82.343753 57.520836 C 83.557295 57.020836 84.812504 56.640627 86.098962 56.385419 C 87.38542 56.130211 88.687504 56.000002 90.000004 56.000002 C 91.312504 56.000002 92.614587 56.130211 93.901046 56.385419 C 95.187504 56.640627 96.442712 57.020836 97.656254 57.520836 C 98.864587 58.026044 100.020838 58.640627 101.109379 59.369794 C 102.203129 60.098961 103.213546 60.927086 104.140629 61.859378 C 105.072921 62.786461 105.901046 63.796878 106.630213 64.890628 C 107.359379 65.979169 107.973963 67.135419 108.479171 68.343753 C 108.979171 69.557295 109.35938 70.812503 109.614588 72.098961 C 109.869796 73.38542 110.000005 74.687503 110.000005 76.000003 Z M 110.000005 76.000003 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path75" />
<g
fill="#333333"
fill-opacity="1"
id="g81">
<use
xlink:href="#glyph-0-5"
x="59.999996"
y="62.249996"
id="use77" />
<use
xlink:href="#glyph-0-6"
x="67.5"
y="62.249996"
id="use79" />
</g>
<path
fill-rule="nonzero"
fill="rgb(96.078491%, 96.078491%, 96.078491%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 85.000004 87.999996 C 91.666671 87.999996 95.000004 91.333329 95.000004 97.999996 C 95.000004 104.666663 91.666671 107.999997 85.000004 107.999997 Z M 85.000004 87.999996 "
transform="matrix(0, 0.75, -0.75, 0, 140.999994, 6)"
id="path83" />
<path
fill="none"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 90.000004 103.000004 L 89.828129 119.000005 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path85" />
<path
fill-rule="nonzero"
fill="rgb(39.99939%, 39.99939%, 39.99939%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="4"
d="M 92.802087 122.000005 C 92.802087 122.395838 92.723962 122.781255 92.572921 123.145838 C 92.421879 123.51563 92.203129 123.838547 91.921879 124.119797 C 91.640629 124.401047 91.317712 124.619797 90.94792 124.770839 C 90.578129 124.92188 90.19792 125.000005 89.802087 125.000005 C 89.401045 125.000005 89.020837 124.92188 88.651045 124.770839 C 88.286462 124.619797 87.958337 124.401047 87.677087 124.119797 C 87.395837 123.838547 87.182295 123.51563 87.026045 123.145838 C 86.875004 122.781255 86.802087 122.395838 86.802087 122.000005 C 86.802087 121.604172 86.875004 121.218755 87.026045 120.854172 C 87.182295 120.48438 87.395837 120.161463 87.677087 119.880213 C 87.958337 119.598963 88.286462 119.380213 88.651045 119.229172 C 89.020837 119.07813 89.401045 119.000005 89.802087 119.000005 C 90.19792 119.000005 90.578129 119.07813 90.94792 119.229172 C 91.317712 119.380213 91.640629 119.598963 91.921879 119.880213 C 92.203129 120.161463 92.421879 120.48438 92.572921 120.854172 C 92.723962 121.218755 92.802087 121.604172 92.802087 122.000005 Z M 92.802087 122.000005 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path87" />
<path
fill-rule="nonzero"
fill="rgb(96.078491%, 96.078491%, 96.078491%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="4"
d="M 190.000008 122.000005 L 270.000011 122.000005 L 270.000011 162.000007 L 190.000008 162.000007 Z M 190.000008 122.000005 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path89" />
<g
fill="#333333"
fill-opacity="1"
id="g95">
<use
xlink:href="#glyph-0-7"
x="165"
y="111.74999"
id="use91" />
<use
xlink:href="#glyph-0-8"
x="172.5"
y="111.74999"
id="use93" />
</g>
<path
fill-rule="nonzero"
fill="rgb(96.078491%, 96.078491%, 96.078491%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="4"
d="M 240.00001 112.000005 L 260.000011 112.000005 L 260.000011 122.000005 L 240.00001 122.000005 Z M 240.00001 112.000005 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path97" />
<path
fill-rule="nonzero"
fill="rgb(96.078491%, 96.078491%, 96.078491%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 205.000005 116.999991 C 211.666672 116.999991 215.000006 120.333324 215.000006 126.999991 C 215.000006 133.666658 211.666672 136.999992 205.000005 136.999992 Z M 205.000005 116.999991 "
transform="matrix(0, 0.75, -0.75, 0, 252.749989, -62.249997)"
id="path99" />
<path
fill="none"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 210.000009 162.000007 L 210.000009 182.000008 L 250.00001 182.000008 L 250.00001 170.23959 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path101" />
<path
fill-rule="nonzero"
fill="rgb(39.99939%, 39.99939%, 39.99939%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 250.00001 164.23959 L 254.000011 172.239591 L 250.00001 170.23959 L 246.00001 172.239591 Z M 250.00001 164.23959 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path103" />
<path
fill-rule="nonzero"
fill="rgb(96.078491%, 96.078491%, 96.078491%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="4"
d="M 230.00001 76.000003 C 230.00001 77.312503 229.869801 78.614587 229.614593 79.901045 C 229.359385 81.187503 228.979176 82.442712 228.479176 83.656253 C 227.973968 84.864587 227.359384 86.020837 226.630218 87.109379 C 225.901051 88.203129 225.072926 89.213545 224.140634 90.140629 C 223.213551 91.07292 222.203134 91.901045 221.109384 92.630212 C 220.020843 93.359379 218.864592 93.973962 217.656259 94.479171 C 216.442717 94.979171 215.187509 95.359379 213.901051 95.614587 C 212.614592 95.869796 211.312509 96.000004 210.000009 96.000004 C 208.687509 96.000004 207.385425 95.869796 206.098967 95.614587 C 204.812509 95.359379 203.5573 94.979171 202.343758 94.479171 C 201.135425 93.973962 199.979175 93.359379 198.890633 92.630212 C 197.796883 91.901045 196.786467 91.07292 195.859383 90.140629 C 194.927091 89.213545 194.098966 88.203129 193.3698 87.109379 C 192.640633 86.020837 192.02605 84.864587 191.520841 83.656253 C 191.020841 82.442712 190.640633 81.187503 190.385425 79.901045 C 190.130216 78.614587 190.000008 77.312503 190.000008 76.000003 C 190.000008 74.687503 190.130216 73.38542 190.385425 72.098961 C 190.640633 70.812503 191.020841 69.557295 191.520841 68.343753 C 192.02605 67.135419 192.640633 65.979169 193.3698 64.890628 C 194.098966 63.796878 194.927091 62.786461 195.859383 61.859378 C 196.786467 60.927086 197.796883 60.098961 198.890633 59.369794 C 199.979175 58.640627 201.135425 58.026044 202.343758 57.520836 C 203.5573 57.020836 204.812509 56.640627 206.098967 56.385419 C 207.385425 56.130211 208.687509 56.000002 210.000009 56.000002 C 211.312509 56.000002 212.614592 56.130211 213.901051 56.385419 C 215.187509 56.640627 216.442717 57.020836 217.656259 57.520836 C 218.864592 58.026044 220.020843 58.640627 221.109384 59.369794 C 222.203134 60.098961 223.213551 60.927086 224.140634 61.859378 C 225.072926 62.786461 225.901051 63.796878 226.630218 64.890628 C 227.359384 65.979169 227.973968 67.135419 228.479176 68.343753 C 228.979176 69.557295 229.359385 70.812503 229.614593 72.098961 C 229.869801 73.38542 230.00001 74.687503 230.00001 76.000003 Z M 230.00001 76.000003 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path105" />
<g
fill="#333333"
fill-opacity="1"
id="g111">
<use
xlink:href="#glyph-0-5"
x="150"
y="62.249996"
id="use107" />
<use
xlink:href="#glyph-0-6"
x="157.5"
y="62.249996"
id="use109" />
</g>
<path
fill-rule="nonzero"
fill="rgb(96.078491%, 96.078491%, 96.078491%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 205.000004 87.999991 C 211.666671 87.999991 215.000004 91.333324 215.000004 97.999991 C 215.000004 104.666658 211.666671 107.999992 205.000004 107.999992 Z M 205.000004 87.999991 "
transform="matrix(0, 0.75, -0.75, 0, 230.99999, -83.999997)"
id="path113" />
<path
fill="none"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 210.000009 103.000004 L 209.828134 119.000005 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path115" />
<path
fill-rule="nonzero"
fill="rgb(39.99939%, 39.99939%, 39.99939%)"
fill-opacity="1"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(39.99939%, 39.99939%, 39.99939%)"
stroke-opacity="1"
stroke-miterlimit="4"
d="M 212.802092 122.000005 C 212.802092 122.395838 212.723967 122.781255 212.572926 123.145838 C 212.421884 123.51563 212.203134 123.838547 211.921884 124.119797 C 211.640634 124.401047 211.317717 124.619797 210.947925 124.770839 C 210.578134 124.92188 210.197925 125.000005 209.802092 125.000005 C 209.40105 125.000005 209.020842 124.92188 208.65105 124.770839 C 208.286467 124.619797 207.958342 124.401047 207.677092 124.119797 C 207.395842 123.838547 207.1823 123.51563 207.02605 123.145838 C 206.875009 122.781255 206.802092 122.395838 206.802092 122.000005 C 206.802092 121.604172 206.875009 121.218755 207.02605 120.854172 C 207.1823 120.48438 207.395842 120.161463 207.677092 119.880213 C 207.958342 119.598963 208.286467 119.380213 208.65105 119.229172 C 209.020842 119.07813 209.40105 119.000005 209.802092 119.000005 C 210.197925 119.000005 210.578134 119.07813 210.947925 119.229172 C 211.317717 119.380213 211.640634 119.598963 211.921884 119.880213 C 212.203134 120.161463 212.421884 120.48438 212.572926 120.854172 C 212.723967 121.218755 212.802092 121.604172 212.802092 122.000005 Z M 212.802092 122.000005 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path117" />
<g
fill="#000000"
fill-opacity="1"
id="g133">
<use
xlink:href="#glyph-1-1"
x="44.226562"
y="23.999998"
id="use119" />
<use
xlink:href="#glyph-1-2"
x="51.734615"
y="23.999998"
id="use121" />
<use
xlink:href="#glyph-1-3"
x="59.242672"
y="23.999998"
id="use123" />
<use
xlink:href="#glyph-1-4"
x="66.750732"
y="23.999998"
id="use125" />
<use
xlink:href="#glyph-1-5"
x="78.754395"
y="23.999998"
id="use127" />
<use
xlink:href="#glyph-1-6"
x="87.000732"
y="23.999998"
id="use129" />
<use
xlink:href="#glyph-1-1"
x="90.751457"
y="23.999998"
id="use131" />
</g>
<g
clip-path="url(#clip-0)"
id="g137">
<path
fill="none"
stroke-width="1"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="#000000"
stroke-opacity="1"
stroke-miterlimit="10"
d="m 110.00001,201.00001 -0.23959,-29"
transform="matrix(0.75,0,0,0.75,0.375,0.375)"
id="path135" />
</g>
<path
fill="none"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="rgb(72.158813%, 32.939148%, 31.369019%)"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 90.000004 172.000007 L 130.000005 172.000007 "
transform="matrix(0.75, 0, 0, 0.75, 0, 0)"
id="path139" />
</svg>

After

Width:  |  Height:  |  Size: 33 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 77 KiB

+730
View File
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 66 KiB

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Before

Width:  |  Height:  |  Size: 416 KiB

After

Width:  |  Height:  |  Size: 416 KiB

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

-296
View File
@@ -1,296 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg5"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
sodipodi:docname="infix1.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
inkscape:snap-others="false"
inkscape:zoom="3.2002729"
inkscape:cx="356.21962"
inkscape:cy="317.00422"
inkscape:window-width="2560"
inkscape:window-height="1385"
inkscape:window-x="1920"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs2">
<rect
x="321.21882"
y="290.93293"
width="205.09601"
height="116.56996"
id="rect20097" />
<rect
x="111.96593"
y="295.01131"
width="309.69414"
height="156.1909"
id="rect3135" />
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<text
xml:space="preserve"
transform="matrix(0.26458333,0,0,0.26458333,57.060209,-16.445051)"
id="text3133"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:120px;line-height:1.25;font-family:'URW Bookman';-inkscape-font-specification:'URW Bookman, Normal';font-variant-ligatures:discretionary-ligatures historical-ligatures;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;white-space:pre;shape-inside:url(#rect3135);fill:#000000;fill-opacity:1;stroke:none"
inkscape:export-filename="/home/jocke/text3133.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"><tspan
x="111.9668"
y="396.05172"
id="tspan64">Infix</tspan></text>
<text
xml:space="preserve"
transform="scale(0.26458333)"
id="text20095"
style="fill:black;fill-opacity:1;line-height:1.25;stroke:none;font-family:sans-serif;font-style:normal;font-weight:normal;font-size:40px;white-space:pre;shape-inside:url(#rect20097)" />
<path
style="fill:#00ff00;stroke-width:0.394877"
d=""
id="path22971"
transform="scale(0.26458333)" />
<path
style="fill:#ffff00;stroke-width:0.0546293"
d=""
id="path23388"
transform="scale(0.26458333)" />
<path
id="path4"
inkscape:connector-curvature="0"
d="m 83.526238,68.793075 -5.55894,5.422039 2.04676,1.992008 0.50866,-0.506842 -0.50866,-0.83688 2.90663,-2.82889 -0.69032,-0.671861 1.97409,-1.909501 z m -17.197591,0.471481 c -0.363329,0 -0.726658,0.353611 -0.726658,0.707223 v 7.307966 c 0,0.35361 0.363329,0.707221 0.726658,0.707221 h 6.842702 l 0.666105,-0.942965 v -2.357405 h -0.484439 v 2.357405 h -0.484437 v -2.357405 h -0.484443 v 2.357405 h -0.484437 v -2.357405 h -0.484437 v 2.357405 h -0.484443 v -2.357405 h -0.484437 v 2.357405 h -0.484439 v -2.357405 h -0.484441 v 2.357405 h -0.484439 v -2.357405 h -0.484437 v 2.357405 h -1.69554 l -0.242221,-0.235737 v -1.650187 l 0.242221,-0.117864 v -1.296576 l -0.242221,-0.117865 v -1.296574 l 0.242221,-0.235741 h 1.816648 l 0.06056,-0.942964 h 0.908327 l 0.121104,-0.942963 h 2.906636 l 0.121104,0.942963 h 0.908325 l 0.06056,0.942964 h 1.816649 l 0.24222,0.235741 v 1.296574 l -0.24222,0.117865 v 0.82509 l 0.36333,-0.530413 0.84777,-0.648287 v -3.418243 c 0,-0.353612 -0.36334,-0.707223 -0.72666,-0.707223 z m 18.214921,0.518631 -1.71976,1.661972 0.3391,0.330036 1.70765,-1.673759 z m 0.69032,0.67186 -1.71976,1.661973 0.33911,0.330038 1.70765,-1.673761 z m 0.69033,0.671861 -1.71976,1.661973 0.33911,0.330038 1.70764,-1.67376 z m 0.67821,0.660075 -1.71976,1.661973 0.33911,0.330037 1.70765,-1.67376 z m -3.34263,0.577564 -2.6523,2.581362 0.52077,0.836879 -2.39798,2.333835 1.02944,1.001899 2.39797,-2.333834 0.85988,0.495057 2.65231,-2.581365 z m 4.03296,0.08251 -1.71976,1.661973 0.33911,0.330037 1.70765,-1.67376 z m 0.69033,0.671861 -1.71977,1.673759 0.33911,0.330037 1.70765,-1.673758 z m 0.69032,0.671862 -1.97409,1.921287 -0.70244,-0.683647 -2.90663,2.840678 -0.85988,-0.506845 -0.52077,0.506845 2.05886,2.003793 5.57105,-5.422037 z m -11.48121,0.165019 -0.7751,0.589353 -1.91354,2.805313 2.16786,2.10988 -0.52077,0.495057 -2.07097,-2.003799 -0.545,0.80152 1.92565,1.874143 -0.50866,0.506838 -1.828762,-1.768057 -0.544991,0.801521 1.683423,1.6384 -0.520768,0.506843 -1.574432,-1.532319 -0.544992,0.80152 1.441207,1.402657 -0.520774,0.506846 -1.344317,-1.308361 -0.544996,0.801515 1.198989,1.166923 c -5.122947,5.5399 -12.062538,-2.157035 -6.975926,-7.814813 v -1.768058 c -9.446566,7.89732 1.574427,18.764965 8.707797,11.221266 l 1.198982,1.166912 0.82355,-0.530416 -1.33221,-1.308357 0.50866,-0.495065 1.44121,1.402668 0.82355,-0.530416 -1.58654,-1.532329 0.52077,-0.506835 1.68343,1.638396 0.82354,-0.530415 -1.82876,-1.768053 0.52078,-0.506843 1.92565,1.874141 0.82354,-0.530416 -2.07098,-2.015584 0.52078,-0.506843 2.16786,2.10988 2.88241,-1.862355 0.59344,-0.754368 -2.56753,-2.498854 -1.97408,1.921287 -1.71977,-1.673758 1.97409,-1.921289 z"
style="stroke-width:0.119479"
inkscape:export-filename="/home/jocke/text3133.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
</g>
<style
id="stylish-2"
class="stylish"
type="text/css">html {background:
/***** COPY AND PASTE THE URL OF YOUR BACKROUND-IMAGE INSIDE THE url(&quot;&quot;) *****/
url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANAAAAC4AgMAAADvbYrQAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAAJUExURQwMDA8PDxISEkrSJjgAAAVcSURBVGjevZqxjtwwDETZTOOvm2Yafp0aNvzKFJRsade3ycqHLA4IcMo70LRIDsk1iDZ/0P8VbTmAZGZmpGiejaBECpLcIUH0DAUpSpIgHZkuSfTchaIJBtk4ggTJnVL94DzJkJjZNqFsECUDjwhEQpKUyXAKExSHh0T3bYgASSNn8zLpomSSSYg4Mo58BEEETaz3N35OL3SoW0iREvcgAyHzGKfoEN4g1t+qS7UBlR2ZLfO8L5J0WQh3KOABybNJfADpDfIol88vF1I6n0Ev5kFyUWodCoSOCIgfnumfoVigk1CkQpCQAVG+D/VMAuuJQ+hXij2RaCQW1lWY0s93UGaTCCFTw7bziSvyM4/MI/pJZtuHnKIy5TmCkJ4tev7qUKZSDyFXQXGFOz1beFsh11OonvjNEeGUFJN5T6GIHh1azAu9OUKSLJN70P/7jHCvotbrTEZGG0EjTSfBDG5CQfX7uUC5QBF1IlFqm1A/4kdIOi6IDyHwA5SCApKcnk+hH82bat2/P9MN1PNUr1W3lwb3d+lbqF5XRpv0wFSomTlElmz8bh9yZt5Btl7Y34MwILvM0xIaTyF3ZsYE9VMOKMav7SFUFpakQRU1dp0lm65Rr3UPIPZ7UVUSpJmB9KBkhhkyjHDfgkb+nX1bmV5OCSGkwytP0/MhFD9BdkofjSL0DJqTb6n7zObeTzKh0CkJnkIvN7OXcMnjyDghD+5BZzM3pRDIxot8EVlrevkSIj3rysyOGIKKZx+UgQzQMtsehK56V+jUJAMaqoB8Avk7pBfIT/1h+xCZGXFnni/mRRyZvWXdg8SIiLgxz18cgQ5xD/r02dJo/KjCuJhXwb80/BRcJnpOQfg95KoCIAlmBkNQQZ3TBZsLwCPILwiCiKDEOC0kxEMBUfkIGiLxgkSVhWsnjnqSZ1DwhGCz+DhdngGZXNvQmZdWMfWa4+z+9BtoxPWiMoyekUlJqM44IchDEsWH0JIvK9m0KQhNkI+JyTNo1WhvEKQa1QFPIV+KWmZTNeiAdLhMPGv1HnQ3v5pEIs1MgsvMkMQ8bPoSMpYf+wCNFdo8U1WJLBEyOI0l/HcgjysGShCOsVZ3x3BOjR9JxS50PfTxDvncXx69NW/PIa0QLS7oiKjhrYt7kGJuEeahIGVrVa3hrWITmkdY0muykRnMNEauxJx5voS0DGpXkXglyzFFOXLuNb6GYploQjqiqd8hdt2W1YbXvGYb0hvkbbR8FxS1NXgOaZlxN+/maTLvFyB/FfMepyPMjvTRoOgJ9P8+ZcQ6vAL52rfUVKYGXnwC+Yg2Xzr7VaX6M8i7eeM0XsYlb3o4apX0PdQd4Yt55QjYEptEXzBsQq/mVXWjRKDyG/oAjbUM8V3oB9let5K80Vo/a/3PkNCVR6ZCRyRAXAuSNirCWWoy2x4EnP9hzop+C+Uj6FolHcpaLqIL/FcoUmdzvAPZnXnVHwzIZkf4NkTJlF0kesylpoIwZOybQMPliG+hGmuZGfEyP3WRNdbCuVDqV+tnqGr8PXTtlY1LARgrxt4ZD+kj8SPEv0MobQvxGKp3qJ9zR/IImiWBrRrtzjz7K4QfoPHEBhquXOUTFJd5lXL2IIyXu07UMaA+5MKSez5AnCZjb9Cc6X3xLUdO5jDcGTVj+R4aY+e5u5Iou/5WrWYjIGW0zLYHnYlFOnSpjLmoRcxF7QFkA5rME+dlfUA6ukhs7tvQ7Ai/M29Z/dDFPeg/byRXOxykJM96xZimqhJ5r5Z3oP61AHo2aCSbCeLvQTFB8xd6xmL4t6BjQF1i/zp0tg31PY0OmY1taUFYHfEV9K/7x/nzB/aTFFDPHGpXAAAAAElFTkSuQmCC&quot;)
/***** FOR A SIMPLE BLACK BACKGROUND JUST REMOVE THE URL LINE ABOVE *****/
/***** Some background-images (you can also use your own url):
default: https://abload.de/img/bg_digital94uzx.png
old default1: https://abload.de/img/b1fgs11.png
old default2: https://abload.de/img/ultra_x2vm9k.jpg
https://abload.de/img/b2w4shd.png
https://abload.de/img/b3qrs99.png
https://abload.de/img/b4zcse8.png
https://abload.de/img/b5b1s7x.png
https://abload.de/img/b6umsmy.png
https://abload.de/img/b7ars8c.png
https://abload.de/img/kubrickbgcolor2darkr8skc.png
https://abload.de/img/xpattern_darkq8s3i.png
https://abload.de/img/mainpatternolxcq.png
*/ #1A1A1A /* fixed */ !important}
/*----- DEFAULT TEXT, BORDER &amp; BACKGROUND COLORS -----*/
* {
color: #999 !important;
text-shadow: 0 0 3px #000 !important;
box-shadow: none !important;
background-color: transparent !important;
border-color: #444 !important;
border-top-color: #444 !important;
border-bottom-color: #444 !important;
border-left-color: #444 !important;
border-right-color: #444 !important}
body {background: transparent !important}
*:before, *:after {background-color: transparent !important; border-color: #444 !important}
a, a * {
color: #409B9B !important;
text-decoration: none !important}
a:hover, a:hover *, a:visited:hover, a:visited:hover *, span[onclick]:hover, div[onclick]:hover, [role=&quot;link&quot;]:hover, [role=&quot;link&quot;]:hover *, [role=&quot;button&quot;]:hover *, [role=&quot;menuitem&quot;]:hover, [role=&quot;menuitem&quot;]:hover *, .link:hover, .link:hover * {
color: #F0F0F0 !important;
text-shadow: 0 0 5px rgba(255,255,200,0.9) !important}
a:visited, a:visited * {
color: #607069 !important}
a.highlight, a.highlight *, a.active, a.active *, .selected, .selected *, [href=&quot;#&quot;] {
color: #DDD !important;
font-weight: bold !important}
h1, h2, h3, h4, h5, h6, h1 *, h2 *, h3 *, strong, [id*=&quot;headline&quot;], [class*=&quot;headline&quot;], [id*=&quot;header&quot;], [class*=&quot;header&quot;], [class*=&quot;header&quot;] td {
color: #DDD !important}
a h1, a h2, a h3, a h4, a h5, a h6, h1 a, h2 a, h3 a, a strong, a[id*=&quot;headline&quot;], a[class*=&quot;headline&quot;], a[id*=&quot;header&quot;], a[class*=&quot;header&quot;] {
text-decoration: underline !important}
[class*=&quot;error&quot;], [class*=&quot;alert&quot;], code, span[onclick], div[onclick] {
color: #900 !important}
::-moz-selection {background: #377 !important; color: #000 !important}
::selection {background: #377 !important; color: #000 !important}
:focus {outline: none !important}
/*----- MENU &amp; CO BACKGROUND-COLORS -----*/
div[style=&quot;display: block;&quot;], div[role=&quot;navigation&quot;] {background: rgba(0,0,0,.5) !important}
table {
background: rgba(40,30,30,.6) !important;
border-radius: 6px !important}
table &gt; tbody &gt; tr:nth-child(even), table &gt; tbody &gt; tr &gt; td:nth-child(even) {
background-color: rgba(0,0,0,.2) !important}
iframe, embed, nav, label [onclick], nav ul, div[style*=&quot;position:&quot;][style*=&quot;left:&quot;][style*=&quot;visible&quot;], div[style*=&quot;z-index:&quot;][style*=&quot;left:&quot;][style*=&quot;visible&quot;], div[style*=&quot;-moz-user-select&quot;], div[role=&quot;menu&quot;], div[role=&quot;dialog&quot;], span[class*=&quot;script&quot;] div, [id*=&quot;menu&quot;], [id*=&quot;Menu&quot;], [class*=&quot;dropdown&quot;], [class*=&quot;popup&quot;], [class=&quot;title&quot;], ul[style*=&quot;display:&quot;], ul[style*=&quot;visibility:&quot;] ul, [id*=&quot;nav&quot;] ul, [class*=&quot;nav&quot;] ul, ul[class*=&quot;menu&quot;], a[onclick][style*=&quot;display&quot;], a[id*=&quot;ghosteryfirefox&quot;], #ghostery-purple-bubble, #translator-popup, .menu, .tooltip, .hovercard, .vbmenu_popup {
background: rgba(5,5,5,.9) !important;
border-radius: 5px;
box-shadow: 1px 1px 5px #000 !important}
header, #header, footer, #footer {
background: rgba(19,19,19,.9) !important;
box-shadow: 0 0 5px #000 !important}
body &gt; #dialog, body &gt; .xenOverlay {
background: rgba(19,19,19,.96) !important;
background-clip: padding-box !important;
box-shadow: 0 0 15px #000, inset 0 0 0 1px rgba(200,200,200,.5), inset 0 0 5px #111 !important;
border: 10px solid rgba(99,99,99,.7) !important;
border-radius: 0 !important;}
[id*=&quot;overlay&quot;], [id*=&quot;lightbox&quot;], blockquote {
background-color: rgba(35,35,35,.9) !important;
border-radius: 5px}
pre, dl, .Message code {
background-color: rgba(5,5,5,.5) !important}
/*----- DEFAULT BUTTONS, SEARCHBOXES &amp; CO -----*/
input, select, button, [role=&quot;button&quot;], a.button, a.submit, a.BigButton, a.TabLink, .install[onclick] {
-moz-appearance: none !important;
-webkit-appearance: none !important;
transition: border-color 0.3s !important;
background: #060606 !important;
color: #BBB !important;
text-shadow: 0 1px #000 !important;
border: 2px solid #333 !important;
border-radius: 4px !important;
box-shadow: 0 0 2px rgba(0,0,0,.9) !important}
a[href=&quot;javascript:;&quot;], a[class*=&quot;button&quot;]:not(:empty), a[id*=&quot;button&quot;]:not(:empty), a[id*=&quot;Button&quot;]:not(:empty), div[class*=&quot;button&quot;][onclick] {
transition: border-color 0.3s !important;
background: #060606 !important;
color: #BBB !important;
text-shadow: 0 1px #000 !important;
border-color: #333 !important;
box-shadow: 0 0 2px rgba(0,0,0,.9) !important}
a[href=&quot;javascript:;&quot;]:hover, a[class*=&quot;button&quot;]:not(:empty):hover, a[id*=&quot;button&quot;]:hover, a[id*=&quot;Button&quot;]:not(:empty):hover, div[class*=&quot;button&quot;][onclick]:hover {
background: #151515 !important;
color: #FFF !important}
input *, select *, button *, a.button *, a.submit * {
color: #BBB !important;
text-shadow: none !important}
input:hover, input[type=&quot;button&quot;]:hover, select:hover, button:hover, [role=&quot;button&quot;]:hover, a.button:hover, a.submit:hover, a.BigButton:hover, a.TabLink:hover {
border: 2px solid #555 !important;
border-top-color: #555 !important;
border-bottom-color: #555 !important;
border-left-color: #555 !important;
border-right-color: #555 !important}
input:focus, select:focus {
box-shadow: 0 0 5px #077 !important}
input *:hover * {
color: #F0F0F0 !important;
text-shadow: 0 0 2px #FFF !important}
input[disabled], select[disabled], button[disabled], input[disabled]:hover, select[disabled]:hover, button[disabled]:hover, input[disabled]:focus, select[disabled]:focus, button[disabled]:focus {
opacity: 0.5 !important;
border-color: #333 !important}
/*
input[type=&quot;checkbox&quot;], input[type=&quot;radio&quot;] {
box-shadow: 0 0 0 2px #444, 0 0 2px 2px #000 !important;
opacity: 0.7;
transition: box-shadow 0.2s, opacity 0.2s !important}
input[type=&quot;checkbox&quot;]:not([disabled]):hover, input[type=&quot;radio&quot;]:not([disabled]):hover {
opacity: 0.9}
input[type=&quot;checkbox&quot;]:not([disabled]):active, input[type=&quot;radio&quot;]:not([disabled]):active {
box-shadow: 0 0 0 2px #999, 0 0 2px 2px #000 !important}
input[type=&quot;checkbox&quot;]:checked, input[type=&quot;radio&quot;]:checked {
box-shadow: 0 0 0 2px #077, 0 0 2px 2px #000 !important}
input[type=&quot;checkbox&quot;][disabled], input[type=&quot;radio&quot;][disabled] {
opacity: 0.35}
*/
input[type=&quot;checkbox&quot;] {border-radius: 1px !important}
input[type=&quot;radio&quot;], input[type=&quot;radio&quot;]:focus {border-radius: 100% !important}
input[type=&quot;checkbox&quot;], input[type=&quot;radio&quot;] {min-width: 12px; min-height: 12px}
input[type=&quot;checkbox&quot;]:checked, input[type=&quot;radio&quot;]:checked {
border-color: #077 !important;
box-shadow: 0 0 5px #077 !important}
select {
padding-right: 15px !important;
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAECAYAAABCxiV9AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAeSURBVBhXY5g5c+Z/BiwALo6uAEMDTACXSWgSDAwA4jATh950E30AAAAASUVORK5CYII=) no-repeat right 4px center #060606 !important;
transition: border-color 0.3s, background-position 0.3s !important}
button:active, input[type=&quot;submit&quot;]:active, input[type=&quot;button&quot;]:active, a.button:active, a[class*=&quot;button&quot;]:not(:empty):active, a.submit:active, a.BigButton:active, a.TabLink:active, .Active .TabLink {
background: #292929 !important;
color: #FFF !important}
textarea {
-moz-appearance: none !important;
-webkit-appearance: none !important;
background: rgba(0,0,0,.3) !important;
border-radius: 3px !important;
border: 1px solid #000 !important;
box-shadow: inset 0 0 8px #000 !important;
transition: border-color, background, 0.3s !important}
textarea, textarea * {
color: #C8C8C8 !important;
text-shadow: 0 0 1px gray !important}
textarea:hover, textarea:focus:hover {
border-color: #333 !important}
textarea:focus {
background: rgba(0,0,0,.5) !important;
border-color: #222 !important}
textarea:focus, textarea:focus &gt; * {
text-shadow: none !important;
box-shadow: none !important}
option, optgroup {
-moz-appearance: none !important;
-webkit-appearance: none !important;
background: none !important;
color: #666 !important}
optgroup {
background: #222 !important;
color: #DDD !important}
option:not([disabled]):hover, option:focus, option:checked {
background: linear-gradient(#333, #292929) !important;
color: #DDD !important}
/*----- IMAGE CHANGES -----*/
body, *:not(:empty):not(html):not(span):not(a):not(b):not(option):not(select):not(img):not([style=&quot;display: block;&quot;]):not([onclick*=&quot;open&quot;]):not([onclick*=&quot;s_objectID&quot;]):not([class*=&quot;stars&quot;]):not([id*=&quot;stars&quot;]):not([id=&quot;rating&quot;]):not([class=&quot;rating&quot;]):not([class*=&quot;SPRITE&quot;]):not([id*=&quot;SPRITE&quot;]):not([class*=&quot;item&quot;]):not([id*=&quot;item&quot;]):not([class*=&quot;thumb&quot;]):not([class*=&quot;icon&quot;]):not([class*=&quot;photo&quot;]):not(.view):not(.text):not([id*=&quot;lbImage&quot;]):not([class*=&quot;cc-in&quot;]):not([class*=&quot;gr-body&quot;]):not([id*=&quot;watch&quot;]):not(#globalsearch),
.r3_hm, .gmbutton2 b, .gtab-i, .ph, .bstab-iLft, .csb, #pagination div, [style*=&quot;sprite2.png&quot;], #mw-head-base, #mw-page-base {
background-image: none !important}
img {opacity: .7 !important; transition: opacity .2s}
img:hover, a:hover img, #mpiv-popup {opacity: 1 !important}</style>
</svg>

Before

Width:  |  Height:  |  Size: 18 KiB

-359
View File
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 38 KiB

+32
View File
@@ -0,0 +1,32 @@
Origin & Licensing
------------------
Infix is entirely built on Open Source components (packages). Most of
them, as well as the build system with its helper scripts and tools, is
from [Buildroot][1], which is distributed under the terms of the GNU
General Public License (GPL). See the file COPYING for details.
Some files in Buildroot contain a different license statement. Those
files are licensed under the license contained in the file itself.
Buildroot and Infix also bundle patch files, which are applied to the
sources of the various packages. Those patches are not covered by the
license of Buildroot or Infix. Instead, they are covered by the license
of the software to which the patches are applied. When said software is
available under multiple licenses, the patches are only provided under
the publicly accessible licenses.
Infix releases include the license information covering all Open Source
packages. This is extracted automatically at build time using the tool
`make legal-info`. Any proprietary software built on top of Infix, or
Buildroot, would need separate auditing to ensure it does not link with
any GPL[^2] licensed library.
[^2]: Infix image builds use GNU libc (GLIBC) which is covered by the
[LGPL][8]. The LGPL *does allow* proprietary software, as long as
said software is linking dynamically, [not statically][5], to GLIBC.
[1]: https://buildroot.org/
[2]: https://www.sysrepo.org/
[5]: https://lwn.net/Articles/117972/
[8]: https://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

+181
View File
@@ -0,0 +1,181 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg5"
inkscape:version="1.2.2 (732a01da63, 2022-12-09, custom)"
sodipodi:docname="infix.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="2.3786088"
inkscape:cx="439.12223"
inkscape:cy="426.29961"
inkscape:window-width="2556"
inkscape:window-height="1417"
inkscape:window-x="1280"
inkscape:window-y="19"
inkscape:window-maximized="1"
inkscape:current-layer="layer5" />
<defs
id="defs2">
<rect
x="505.95288"
y="579.6032"
width="127.6438"
height="127.94966"
id="rect1266" />
<rect
x="309.92126"
y="404.51989"
width="483.77954"
height="358.02926"
id="rect600" />
<inkscape:path-effect
effect="bspline"
id="path-effect5591"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
</defs>
<g
inkscape:groupmode="layer"
id="layer6"
inkscape:label="bg"
style="display:none;fill:#ff0000;fill-opacity:1"
transform="matrix(1.2831201,0,0,3.2117929,-26.690111,-224.39813)">
<rect
style="fill:#22272e;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:1"
id="rect10264"
width="163.66356"
height="92.471725"
x="20.800945"
y="69.866936"
inkscape:label="bg" />
</g>
<g
inkscape:groupmode="layer"
id="layer5"
inkscape:label="tagline"
style="display:inline">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.77333px;font-family:Laksaman;-inkscape-font-specification:'Laksaman, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:1"
x="85.018883"
y="131.54915"
id="text9503"
inkscape:label="linux-netconf"
inkscape:export-filename="../b725e1c8/infix.png"
inkscape:export-xdpi="191.95932"
inkscape:export-ydpi="191.95932"><tspan
sodipodi:role="line"
id="tspan9519"
x="85.018883"
y="131.54915"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.77333px;font-family:Laksaman;-inkscape-font-specification:'Laksaman, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#808080"
id="tspan11822">Linux</tspan> <tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.77333px;font-family:Laksaman;-inkscape-font-specification:'Laksaman, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#ff7f2a;fill-opacity:1"
id="tspan9929"></tspan> <tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.77333px;font-family:Laksaman;-inkscape-font-specification:'Laksaman, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#808080"
id="tspan11824">NETCONF</tspan></tspan></text>
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="heading">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.4px;font-family:'URW Bookman';-inkscape-font-specification:'URW Bookman, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#808080;stroke-width:1.029;fill-opacity:1"
x="84.745331"
y="124.1693"
id="text1160"
inkscape:label="infix"><tspan
sodipodi:role="line"
id="tspan1272"
x="84.745331"
y="124.1693">Infix</tspan></text>
</g>
<g
inkscape:label="tux"
inkscape:groupmode="layer"
id="layer1"
style="display:inline">
<rect
style="fill:#f9f9f9;stroke:#808080;stroke-width:1.029;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
id="rect1698"
width="22.470779"
height="16.970779"
x="59.529221"
y="107.02922"
inkscape:label="body" />
<rect
style="fill:#ff7f2a;stroke:#808080;stroke-width:1;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="rect184-3"
width="6"
height="4"
x="76"
y="120"
inkscape:label="foot-r" />
<rect
style="fill:#ff7f2a;stroke:#808080;stroke-width:1;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="rect184"
width="6"
height="4"
x="59.529221"
y="120"
inkscape:label="foot-l" />
<path
sodipodi:type="star"
style="fill:#ff7f2a;stroke:none;stroke-width:1;stroke-dasharray:none;stroke-opacity:1"
id="path11801"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="42.414055"
sodipodi:cy="98.701302"
sodipodi:r1="1.9660654"
sodipodi:r2="0.9830327"
sodipodi:arg1="1.5707963"
sodipodi:arg2="2.6179939"
inkscape:rounded="0"
inkscape:randomized="0"
d="m 42.414055,100.66737 -1.702663,-2.949101 3.405325,0 z"
inkscape:transform-center-y="0.49151511"
transform="translate(28.350554,16.321792)"
inkscape:label="nose" />
<circle
style="display:inline;fill:#808080;stroke:none;stroke-width:4.99999;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
id="path6519-5"
cx="73.211082"
cy="111.02191"
r="0.5"
inkscape:label="eye-r" />
<circle
style="fill:#808080;stroke:none;stroke-width:4.99999;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
id="path6519"
cx="68.31813"
cy="111.02191"
r="0.5"
inkscape:label="eye-l" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.8 KiB

+317
View File
@@ -0,0 +1,317 @@
# Linux Networking
## Interface LEGO®
![Linux Networking Blocks](img/lego.svg)
| **Type** | **Yang Model** | **Description** |
| -------- | ----------------- | ------------------------------------------------------------- |
| bridge | infix-if-bridge | SW implementation of an IEEE 802.1Q bridge |
| ip | ietf-ip, infix-ip | IP address to the subordinate interface |
| vlan | ietf-vlan-encap | Capture all traffic belonging to a specific 802.1Q VID |
| lag[^1] | infix-if-lag | Bonds multiple interfaces into one, creating a link aggregate |
| lo | ietf-interfaces | Software loopback interface |
| eth | ietf-interfaces | Physical Ethernet device/port |
| veth | infix-if-veth | Virtual Ethernet pair, typically one end is in a container |
## Data Plane
The blocks you ctose, and how you connect them, defines your data plane. Here we see an example of how to bridge a virtual port with a physical LAN.
![Example of a 4-port switch with a link aggregate and a VETH pair to a container](img/dataplane.svg)
Depending on the (optional) VLAN filtering of the bridge, the container may have full or limited connectivity with outside ports, as well as the internal CPU.
In fact the virtual port connected to the bridge can be member of several VLANs, with each VLAN being an interface with an IP address inside the container.
Thanks to Linux, and technologies like switchdev, that allow you to split a switching fabric into unique (isolated) ports, the full separation and virtualization of all Ethernet layer properties are possible to share with a container. Meaning, all the building blocks used on the left hand side can also be used freely on the right hand side as well.
### Bridging
This is the most central part of the system. A bridge is a switch, and a switch is a bridge. In Linux, setting up a bridge with ports connected to physical switch fabric, means you manage the actual switch fabric!
In Infix ports are by default not switch ports, unless the customer specific factory config sets it up this way. To enable switching between ports you create a bridge and then add ports to that bridge. That's it.
```
admin@example:/> configure
admin@example:/config/> edit interfaces interface br0
admin@example:/config/interfaces/interface/br0/> up
admin@example:/config/interfaces/> set interface eth0 bridge-port bridge br0
admin@example:/config/interfaces/> set interface eth1 bridge-port bridge br0
admin@example:/config/interfaces/> leave
```
Here we add two ports to bridge `br0`: `eth0` and `eth1`.
> **Note:** Infix has many built-in helpers controlled by convention. E.g., if you name your bridge `brN`, where `N` is a number, Infix will set the interface type automatically for you, and unlock all bridge features for you.
#### VLAN Filtering Bridge
By default bridges in Linux do not filter based on VLAN tags. It can be enabled in Infix when creating a bridge by adding a port to a VLAN as a tagged or untagged member:
```
admin@example:/config/> edit interfaces interface br0
admin@example:/config/interfaces/interface/br0/> up
admin@example:/config/interfaces/> set interface eth0 bridge-port bridge br0
admin@example:/config/interfaces/> set interface eth1 bridge-port bridge br0
admin@example:/config/interfaces/> edit interface br0
admin@example:/config/interfaces/interface/br0/> set bridge vlans vlan 10 untagged eth0
admin@example:/config/interfaces/interface/br0/> set bridge vlans vlan 20 untagged eth1
```
This sets `eth0` as an untagged member of VLAN 10 and `eth1` as an
untagged member of VLAN 20. Switching between these ports is thus
prohibited.
### VLAN Interfaces
Creating a VLAN can be done in many ways. This section assumes VLAN interfaces created atop another Linux interface. E.g., the VLAN interfaces created on top of the bridge in the picture above.
A VLAN interface is basically a filtering abstraction. When you run `tcpdump` on a VLAN interface you will only see the frames matching the VLAN ID of the interface, compared to *all* the VLAN IDs if you run `tcpdump` on the parent interface.
```
admin@example:/> configure
admin@example:/config/> edit interfaces interface eth0.20
admin@example:/config/interfaces/interface/eth0.20/> set encapsulation dot1q-vlan outer-tag tag-type c-vlan vlan-id 20
admin@example:/config/interfaces/interface/eth0.20/> set parent-interface eth0
admin@example:/config/interfaces/interface/eth0.20/> leave
```
> **Note:** If you name your VLAN interface `foo0.N`, where `N` is a number, Infix will set the interface type automatically for you.
## Management Plane
This section details IP Addresses And Other Per-Interface IP settings.
Infix support several network interface types, each can be assigned one or more IP addresses, both IPv4 and IPv6 are supported.
![IP on top of network interface examples](img/ip-iface-examples.svg)
### IPv4 Address Assignment
Multiple address assignment methods are available:
| **Type** | **Yang Model** | **Description** |
|:---------- |:----------------- |:-------------------------------------------------------------- |
| static | ietf-ip | Static assignment of IPv4 address, e.g., *10.0.1.1/24* |
| link-local | infix-ip | Auto-assignment of IPv4 address in 169.254.x.x/16 range |
| dhcp | infix-dhcp-client | Assignment of IPv4 address by DHCP server, e.g., *10.0.1.1/24* |
DHCP address method is only available for *LAN* interfaces (ethernet, virtual ethernet (veth), bridge, etc.)
### IPv6 Address Assignment
Multiple address assignment methods are available:
| **Type** | **Yang Model** | **Description** |
|:---------------- |:-------------- |:------------------------------------------------------------------------------------------------------------------------------------------------- |
| static | ietf-ip | Static assignment of IPv6 address, e.g., *2001:db8:0:1::1/64* |
| link-local | ietf-ip[^2] | (RFC4862) Auto-configured link-local IPv6 address (*fe80::0* prefix + interface identifier, e.g., *fe80::ccd2:82ff:fe52:728b/64*) |
| global auto-conf | ietf-ip | (RFC4862) Auto-configured (stateless) global IPv6 address (prefix from router + interface identifier, e.g., *2001:db8:0:1:ccd2:82ff:fe52:728b/64* |
Both for *link-local* and *global auto-configuration*, it is possible
to auto-configure using a random suffix instead of the interface
identifier.
### Examples
![Switch example (eth0 and lo)](img/ip-address-example-switch.svg)
root@infix-00-00-00:/> show interfaces
INTERFACE PROTOCOL STATE DATA
eth0 ethernet UP 02:00:00:00:00:00
ipv6 fe80::ff:fe00:0/64 (link-layer)
lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
root@infix-00-00-00:/>
To illustrate IP address configuration, the examples below uses a
switch with a single Ethernet interface (eth0) and a loopback
interface (lo). As shown above, these examples assume *eth0* has an
IPv6 link-local address and *lo* has static IPv4 and IPv6 addresses by
default.
#### Static and link-local IPv4 addresses
![Setting static IPv4 (and link-local IPv4)](img/ip-address-example-ipv4-static.svg)
root@example:/> configure
root@example:/config/> edit interfaces interface eth0 ipv4
root@example:/config/interfaces/interface/eth0/ipv4/> set address 10.0.1.1 prefix-length 24
root@example:/config/interfaces/interface/eth0/ipv4/> set autoconf enabled true
root@infix-example:/config/interfaces/interface/eth0/ipv4/> diff
+interfaces {
+ interface eth0 {
+ ipv4 {
+ address 10.0.1.1 {
+ prefix-length 24;
+ }
+ autoconf {
+ enabled true;
+ }
+ }
+ }
+}
root@infix-example:/config/interfaces/interface/eth0/ipv4/> leave
root@infix-example:/> show interfaces
INTERFACE PROTOCOL STATE DATA
eth0 ethernet UP 02:00:00:00:00:00
ipv4 10.0.1.1/24 (static)
ipv6 fe80::ff:fe00:0/64 (link-layer)
lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
root@infix-example:/> show interfaces
INTERFACE PROTOCOL STATE DATA
eth0 ethernet UP 02:00:00:00:00:00
ipv4 169.254.1.3/16 (random)
ipv4 10.0.1.1/24 (static)
ipv6 fe80::ff:fe00:0/64 (link-layer)
lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
root@infix-example:/>
As shown, the link-local IPv4 address is configured with `set autconf
enabled true`. The resulting address (169.254.1.3/16) is of type
*random* ([IETF ip-yang][ietf-ip-yang]).
#### Use of DHCP for IPv4 address assignment
![Using DHCP for IPv4 address assignment](img/ip-address-example-ipv4-dhcp.svg)
root@example:/> configure
root@example:/config/> edit dhcp-client
root@example:/config/dhcp-client/> set client-if eth0
root@example:/config/dhcp-client/> set enabled true
root@example:/config/dhcp-client/> leave
root@example:/> show interfaces
INTERFACE PROTOCOL STATE DATA
eth0 ethernet UP 02:00:00:00:00:00
ipv4 10.1.2.100/24 (dhcp)
ipv6 fe80::ff:fe00:0/64 (link-layer)
lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
root@example:/>
The resulting address (10.1.2.100/24) is of type *dhcp*.
#### Disabling IPv6 link-local address(es)
The (only) way to disable IPv6 link-local addresses is by disabling IPv6 on the interface.
```(disabling
root@example:/> configure
root@example:/config/> edit interfaces interface eth0 ipv6
root@example:/config/interfaces/interface/eth0/ipv6/> set enabled false
root@example:/config/interfaces/interface/eth0/ipv6/> leave
root@example:/> show interfaces
INTERFACE PROTOCOL STATE DATA
eth0 ethernet UP 02:00:00:00:00:00
lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
root@example:/>
```
#### Static IPv6 address
![Setting static IPv6](img/ip-address-example-ipv6-static.svg)
root@example:/> configure
root@example:/config/> edit interfaces interface eth0 ipv6
root@example:/config/interfaces/interface/eth0/ipv6/> set address 2001:db8::1 prefix-length 64
root@example:/config/interfaces/interface/eth0/ipv6/> leave
root@example:/> show interfaces
INTERFACE PROTOCOL STATE DATA
eth0 ethernet UP 02:00:00:00:00:00
ipv6 2001:db8::1/64 (static)
ipv6 fe80::ff:fe00:0/64 (link-layer)
lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
root@example:/>
#### Stateless Auto-configuration of Global IPv6 Address
![Auto-configuration of global IPv6](img/ip-address-example-ipv6-auto-global.svg)
Stateless address auto-configuration of global addresses is enabled by
default. The address is formed by concatenating the network prefix
advertised by the router (here 2001:db8:0:1::0/64) and the interface
identifier. The resulting address is of type *other*.
root@infix-example:/> show interfaces
INTERFACE PROTOCOL STATE DATA
eth0 ethernet UP 02:00:00:00:00:00
ipv6 2001:db8:0:1:0:ff:fe00:0/64 (other)
ipv6 fe80::ff:fe00:0/64 (link-layer)
lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
root@infix-example:/>
Disabling auto-configuration of global IPv6 addresses can be done as shown
below.
root@infix-00-00-00:/> configure
root@infix-00-00-00:/config/> edit interfaces interface eth0 ipv6
root@infix-00-00-00:/config/interfaces/interface/eth0/ipv6/> set autoconf create-global-addresses false
root@infix-00-00-00:/config/interfaces/interface/eth0/ipv6/> leave
root@infix-00-00-00:/> show interfaces
INTERFACE PROTOCOL STATE DATA
eth0 ethernet UP 02:00:00:00:00:00
ipv6 fe80::ff:fe00:0/64 (link-layer)
lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
root@infix-00-00-00:/>
#### Random Link Identifiers for IPv6 Stateless Autoconfiguration
![Auto-configuration of global IPv6](img/ip-address-example-ipv6-auto-global.svg)
By default, the auto-configured link-local and global IPv6 addresses
are formed from a link-identifier based on the MAC address.
root@infix-example:/> show interfaces
INTERFACE PROTOCOL STATE DATA
eth0 ethernet UP 02:00:00:00:00:00
ipv6 2001:db8:0:1:0:ff:fe00:0/64 (other)
ipv6 fe80::ff:fe00:0/64 (link-layer)
lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
root@infix-example:/>
To avoid revealing identity information in the IPv6 address, it is
possible to specify use of a random identifier ([ietf-ip][ietf-ip-yang] YANG and [RFC8981][ietf-ipv6-privacy]).
root@infix-example:/> configure
root@infix-example:/config/> edit interfaces interface eth0 ipv6
root@infix-example:/config/interfaces/interface/eth0/ipv6/> set autoconf create-temporary-addresses true
root@infix-example:/config/interfaces/interface/eth0/ipv6/> leave
root@infix-example:/> show interfaces
INTERFACE PROTOCOL STATE DATA
eth0 ethernet UP 02:00:00:00:00:00
ipv6 2001:db8:0:1:fba2:f413:dd22:13ad/64 (other)
ipv6 fe80::b886:6849:18dc:19ef/64 (random)
lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
root@infix-example:/>
The link-local address has changed type to *random*.
[ietf-ip-yang]: https://www.rfc-editor.org/rfc/rfc8344.html
[ietf-ipv6-privacy]: https://www.rfc-editor.org/rfc/rfc8981.html
[^1]: Please note, link aggregates are not yet supported in Infix.
[^2]: Link-local IPv6 addresses are implicitly enabled when enabling IPv6. IPv6 can be enabled/disabled per interface in [ietf-ip][ietf-ip-yang] YANG model.

Some files were not shown because too many files have changed in this diff Show More