Compare commits
@@ -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
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
Paid support and development provided by Addiva Elektronik <https://addiva.se>
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -1,7 +1,10 @@
|
||||
*~
|
||||
.gdb_history
|
||||
/.backup
|
||||
/.ccache
|
||||
/dl
|
||||
/output*
|
||||
/x-*
|
||||
/test/.venv
|
||||
/test/.log
|
||||
/local.mk
|
||||
|
||||
@@ -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
|
||||
@@ -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}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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");
|
||||
};
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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/"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -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,2 +1 @@
|
||||
set COLORTERM=yes
|
||||
runparts /cfg/start.d
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
service [2345789] log:prio:user.notice rauc service -- Software update service
|
||||
@@ -0,0 +1 @@
|
||||
../available/rauc.conf
|
||||
@@ -1 +0,0 @@
|
||||
../available/sshd.conf
|
||||
@@ -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,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
|
||||
|
||||
@@ -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
|
||||
@@ -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 @@
|
||||
nano
|
||||
mg
|
||||
@@ -1 +1 @@
|
||||
nano
|
||||
mg
|
||||
@@ -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
|
||||
@@ -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,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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
@@ -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 }]
|
||||
},
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -1,2 +0,0 @@
|
||||
Tobias Waldekranz <tobias@waldekranz.com>
|
||||
Joachim Wiberg <troglobit@gmail.com>
|
||||
@@ -0,0 +1 @@
|
||||
variant.md
|
||||
@@ -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"}}'
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -0,0 +1 @@
|
||||
introduction.md
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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 |
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
After Width: | Height: | Size: 135 KiB |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
|
After Width: | Height: | Size: 77 KiB |
|
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 |
@@ -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("") *****/
|
||||
|
||||
|
||||
url("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")
|
||||
|
||||
/***** 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 & 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="link"]:hover, [role="link"]:hover *, [role="button"]:hover *, [role="menuitem"]:hover, [role="menuitem"]: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="#"] {
|
||||
color: #DDD !important;
|
||||
font-weight: bold !important}
|
||||
|
||||
h1, h2, h3, h4, h5, h6, h1 *, h2 *, h3 *, strong, [id*="headline"], [class*="headline"], [id*="header"], [class*="header"], [class*="header"] 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*="headline"], a[class*="headline"], a[id*="header"], a[class*="header"] {
|
||||
text-decoration: underline !important}
|
||||
[class*="error"], [class*="alert"], 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 & CO BACKGROUND-COLORS -----*/
|
||||
div[style="display: block;"], div[role="navigation"] {background: rgba(0,0,0,.5) !important}
|
||||
|
||||
table {
|
||||
background: rgba(40,30,30,.6) !important;
|
||||
border-radius: 6px !important}
|
||||
table > tbody > tr:nth-child(even), table > tbody > tr > td:nth-child(even) {
|
||||
background-color: rgba(0,0,0,.2) !important}
|
||||
|
||||
iframe, embed, nav, label [onclick], nav ul, div[style*="position:"][style*="left:"][style*="visible"], div[style*="z-index:"][style*="left:"][style*="visible"], div[style*="-moz-user-select"], div[role="menu"], div[role="dialog"], span[class*="script"] div, [id*="menu"], [id*="Menu"], [class*="dropdown"], [class*="popup"], [class="title"], ul[style*="display:"], ul[style*="visibility:"] ul, [id*="nav"] ul, [class*="nav"] ul, ul[class*="menu"], a[onclick][style*="display"], a[id*="ghosteryfirefox"], #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 > #dialog, body > .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*="overlay"], [id*="lightbox"], 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 & CO -----*/
|
||||
input, select, button, [role="button"], 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="javascript:;"], a[class*="button"]:not(:empty), a[id*="button"]:not(:empty), a[id*="Button"]:not(:empty), div[class*="button"][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="javascript:;"]:hover, a[class*="button"]:not(:empty):hover, a[id*="button"]:hover, a[id*="Button"]:not(:empty):hover, div[class*="button"][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="button"]:hover, select:hover, button:hover, [role="button"]: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="checkbox"], input[type="radio"] {
|
||||
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="checkbox"]:not([disabled]):hover, input[type="radio"]:not([disabled]):hover {
|
||||
opacity: 0.9}
|
||||
input[type="checkbox"]:not([disabled]):active, input[type="radio"]:not([disabled]):active {
|
||||
box-shadow: 0 0 0 2px #999, 0 0 2px 2px #000 !important}
|
||||
input[type="checkbox"]:checked, input[type="radio"]:checked {
|
||||
box-shadow: 0 0 0 2px #077, 0 0 2px 2px #000 !important}
|
||||
input[type="checkbox"][disabled], input[type="radio"][disabled] {
|
||||
opacity: 0.35}
|
||||
*/
|
||||
input[type="checkbox"] {border-radius: 1px !important}
|
||||
input[type="radio"], input[type="radio"]:focus {border-radius: 100% !important}
|
||||
input[type="checkbox"], input[type="radio"] {min-width: 12px; min-height: 12px}
|
||||
input[type="checkbox"]:checked, input[type="radio"]: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="submit"]:active, input[type="button"]:active, a.button:active, a[class*="button"]: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 > * {
|
||||
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="display: block;"]):not([onclick*="open"]):not([onclick*="s_objectID"]):not([class*="stars"]):not([id*="stars"]):not([id="rating"]):not([class="rating"]):not([class*="SPRITE"]):not([id*="SPRITE"]):not([class*="item"]):not([id*="item"]):not([class*="thumb"]):not([class*="icon"]):not([class*="photo"]):not(.view):not(.text):not([id*="lbImage"]):not([class*="cc-in"]):not([class*="gr-body"]):not([id*="watch"]):not(#globalsearch),
|
||||
.r3_hm, .gmbutton2 b, .gtab-i, .ph, .bstab-iLft, .csb, #pagination div, [style*="sprite2.png"], #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 |
|
Before Width: | Height: | Size: 38 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 16 KiB |
@@ -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 |
@@ -0,0 +1,317 @@
|
||||
# Linux Networking
|
||||
|
||||
## Interface LEGO®
|
||||
|
||||

|
||||
|
||||
| **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.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
### 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
|
||||
|
||||

|
||||
|
||||
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
|
||||
|
||||

|
||||
|
||||
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
|
||||
|
||||

|
||||
|
||||
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
|
||||
|
||||

|
||||
|
||||
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
|
||||
|
||||

|
||||
|
||||
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
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||
|
||||