From fc4783f17e7c00064e6fdd36b62dcf029dfc745b Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Sun, 6 Feb 2022 23:06:55 +0100 Subject: [PATCH] Detect wireless interfaces; use layered config; use detected interfaces --- packaging/packages/synit-config/APKBUILD | 8 ++- .../files/etc/syndicate/boot/010-milestone.pr | 10 +++ .../syndicate/boot/010-service-state-up.pr | 4 ++ .../etc/syndicate/boot/020-load-core-layer.pr | 28 +++++++++ .../etc/syndicate/boot/030-load-services.pr | 26 ++++++++ .../files/etc/syndicate/configdirs.pr | 2 - .../files/etc/syndicate/core/configdirs.pr | 2 + .../files/etc/syndicate/{ => core}/eudev.pr | 9 +-- .../files/etc/syndicate/core/hostname.pr | 2 + .../syndicate/{ => core}/machine-dataspace.pr | 0 .../files/etc/syndicate/core/network.pr | 63 +++++++++++++++++++ .../files/etc/syndicate/docker.pr | 4 -- .../files/etc/syndicate/hostname.pr | 3 - .../files/etc/syndicate/interface-monitor.pr | 20 ------ .../files/etc/syndicate/network.pr | 29 --------- .../files/etc/syndicate/services/docker.pr | 3 + .../etc/syndicate/{ => services}/sshd.pr | 3 +- .../synit-config/files/sbin/synit-init.sh | 4 +- .../python/synit/daemon/interface_monitor.py | 21 ++++++- .../packages/synit-config/sync-protocols.sh | 3 + protocols/schema-bundle.bin | 4 +- protocols/schemas/network.prs | 13 ++++ 22 files changed, 185 insertions(+), 76 deletions(-) create mode 100644 packaging/packages/synit-config/files/etc/syndicate/boot/010-milestone.pr create mode 100644 packaging/packages/synit-config/files/etc/syndicate/boot/010-service-state-up.pr create mode 100644 packaging/packages/synit-config/files/etc/syndicate/boot/020-load-core-layer.pr create mode 100644 packaging/packages/synit-config/files/etc/syndicate/boot/030-load-services.pr delete mode 100644 packaging/packages/synit-config/files/etc/syndicate/configdirs.pr create mode 100644 packaging/packages/synit-config/files/etc/syndicate/core/configdirs.pr rename packaging/packages/synit-config/files/etc/syndicate/{ => core}/eudev.pr (54%) create mode 100644 packaging/packages/synit-config/files/etc/syndicate/core/hostname.pr rename packaging/packages/synit-config/files/etc/syndicate/{ => core}/machine-dataspace.pr (100%) create mode 100644 packaging/packages/synit-config/files/etc/syndicate/core/network.pr delete mode 100644 packaging/packages/synit-config/files/etc/syndicate/docker.pr delete mode 100644 packaging/packages/synit-config/files/etc/syndicate/hostname.pr delete mode 100644 packaging/packages/synit-config/files/etc/syndicate/interface-monitor.pr delete mode 100644 packaging/packages/synit-config/files/etc/syndicate/network.pr create mode 100644 packaging/packages/synit-config/files/etc/syndicate/services/docker.pr rename packaging/packages/synit-config/files/etc/syndicate/{ => services}/sshd.pr (73%) create mode 100755 packaging/packages/synit-config/sync-protocols.sh diff --git a/packaging/packages/synit-config/APKBUILD b/packaging/packages/synit-config/APKBUILD index 6b89bc1..a74c096 100644 --- a/packaging/packages/synit-config/APKBUILD +++ b/packaging/packages/synit-config/APKBUILD @@ -1,8 +1,10 @@ # Contributor: Tony Garnock-Jones # Maintainer: Tony Garnock-Jones pkgname=synit-config -pkgver=0.0.5 -pkgrel=1 +pkgver=0.0.6 +pkgrel=$(date '+%Y%m%d%H%M%S') +# pkgver=0.0.5 +# pkgrel=1 pkgdesc="synit system layer configuration" url="https://synit.org/" arch="noarch" @@ -57,5 +59,5 @@ docker() { description="Synit startup for Docker" install_if="$pkgname docker" - amove etc/syndicate/docker.pr + amove etc/syndicate/services/docker.pr } diff --git a/packaging/packages/synit-config/files/etc/syndicate/boot/010-milestone.pr b/packaging/packages/synit-config/files/etc/syndicate/boot/010-milestone.pr new file mode 100644 index 0000000..9e512c3 --- /dev/null +++ b/packaging/packages/synit-config/files/etc/syndicate/boot/010-milestone.pr @@ -0,0 +1,10 @@ +; To "run" a milestone service, +; - assert that it is both started and ready +; - that's it! +; +? > [ + started> + ready> + $log ! state: up }> + ?- state: down }> +] diff --git a/packaging/packages/synit-config/files/etc/syndicate/boot/010-service-state-up.pr b/packaging/packages/synit-config/files/etc/syndicate/boot/010-service-state-up.pr new file mode 100644 index 0000000..e9fd2b2 --- /dev/null +++ b/packaging/packages/synit-config/files/etc/syndicate/boot/010-service-state-up.pr @@ -0,0 +1,4 @@ +; To the usual suite of service states we add `up`, meaning "either `ready` or `complete`". +; +? +? diff --git a/packaging/packages/synit-config/files/etc/syndicate/boot/020-load-core-layer.pr b/packaging/packages/synit-config/files/etc/syndicate/boot/020-load-core-layer.pr new file mode 100644 index 0000000..e1e4f53 --- /dev/null +++ b/packaging/packages/synit-config/files/etc/syndicate/boot/020-load-core-layer.pr @@ -0,0 +1,28 @@ +; Attenuate `$config` by rewriting plain `require-service` assertions to `require-core-service` +; assertions. Allow all other assertions through. +; +let ?sys = <* $config [ + > + +]> + +; Give meaning to `require-core-service`: it is an ordinary `require-service`, plus a +; declaration that the `core` milestone depends on the service. +; +? [ + > + +] + +; Load config in the `core` directory, using the wrapped `config` so that all plain services +; required are changed to be *core* services. +; +> + +; In addition, require the `core` milestone explicitly. +; +> diff --git a/packaging/packages/synit-config/files/etc/syndicate/boot/030-load-services.pr b/packaging/packages/synit-config/files/etc/syndicate/boot/030-load-services.pr new file mode 100644 index 0000000..92797fb --- /dev/null +++ b/packaging/packages/synit-config/files/etc/syndicate/boot/030-load-services.pr @@ -0,0 +1,26 @@ +; Attenuate `$config` by rewriting plain `require-service` assertions to +; `require-basic-service` assertions. Allow all other assertions through. +; +let ?basic = <* $config [ + > + +]> + +; Give meaning to `require-basic-service`: it is an ordinary `require-service`, plus a +; declaration that the service depends on the `core` milestone. +; +? [ + up>> + +] + +; Once we see that the `core` milestone is ready, start processing the `services` +; directory. +; +? up> [ + > +] diff --git a/packaging/packages/synit-config/files/etc/syndicate/configdirs.pr b/packaging/packages/synit-config/files/etc/syndicate/configdirs.pr deleted file mode 100644 index 6a385fa..0000000 --- a/packaging/packages/synit-config/files/etc/syndicate/configdirs.pr +++ /dev/null @@ -1,2 +0,0 @@ -> -> diff --git a/packaging/packages/synit-config/files/etc/syndicate/core/configdirs.pr b/packaging/packages/synit-config/files/etc/syndicate/core/configdirs.pr new file mode 100644 index 0000000..51a30d8 --- /dev/null +++ b/packaging/packages/synit-config/files/etc/syndicate/core/configdirs.pr @@ -0,0 +1,2 @@ +> +> diff --git a/packaging/packages/synit-config/files/etc/syndicate/eudev.pr b/packaging/packages/synit-config/files/etc/syndicate/core/eudev.pr similarity index 54% rename from packaging/packages/synit-config/files/etc/syndicate/eudev.pr rename to packaging/packages/synit-config/files/etc/syndicate/core/eudev.pr index ec1a156..5d06726 100644 --- a/packaging/packages/synit-config/files/etc/syndicate/eudev.pr +++ b/packaging/packages/synit-config/files/etc/syndicate/core/eudev.pr @@ -1,9 +1,6 @@ - ready>> - complete>> - -> +> -> - ready>> +> + up>> /proc/sys/kernel/hotplug && udevadm trigger --type=subsystems --action=add && udevadm trigger --type=devices --action=add && udevadm settle --timeout=30">> diff --git a/packaging/packages/synit-config/files/etc/syndicate/core/hostname.pr b/packaging/packages/synit-config/files/etc/syndicate/core/hostname.pr new file mode 100644 index 0000000..e21fe94 --- /dev/null +++ b/packaging/packages/synit-config/files/etc/syndicate/core/hostname.pr @@ -0,0 +1,2 @@ +> +> diff --git a/packaging/packages/synit-config/files/etc/syndicate/machine-dataspace.pr b/packaging/packages/synit-config/files/etc/syndicate/core/machine-dataspace.pr similarity index 100% rename from packaging/packages/synit-config/files/etc/syndicate/machine-dataspace.pr rename to packaging/packages/synit-config/files/etc/syndicate/core/machine-dataspace.pr diff --git a/packaging/packages/synit-config/files/etc/syndicate/core/network.pr b/packaging/packages/synit-config/files/etc/syndicate/core/network.pr new file mode 100644 index 0000000..f5f4226 --- /dev/null +++ b/packaging/packages/synit-config/files/etc/syndicate/core/network.pr @@ -0,0 +1,63 @@ +> + +> + ready>> + +> + +? > [ + $log ! + ! + ?- ! +] + +? > [ + $log ! + ! + ?- ! + >> +] + +? >> [ + ["udhcpc" "-i" $ifname "-fR"]> +] + +?? ! + +?? [ + let ?id = timestamp + let ?facet = facet + let ?d = + > + + ? complete> [$facet ! stop] + ? failed> [$facet ! stop] +] + +;--------------------------------------------------------------------------- + + + +? [ + ? ?cap> [ + $cap { + machine: $machine + } + ] + + $machine ? ?r [ + $log ! + ?- $log ! + ] + + $machine ? [ + $config > + ] +] diff --git a/packaging/packages/synit-config/files/etc/syndicate/docker.pr b/packaging/packages/synit-config/files/etc/syndicate/docker.pr deleted file mode 100644 index a957881..0000000 --- a/packaging/packages/synit-config/files/etc/syndicate/docker.pr +++ /dev/null @@ -1,4 +0,0 @@ -> - ready>> - - diff --git a/packaging/packages/synit-config/files/etc/syndicate/hostname.pr b/packaging/packages/synit-config/files/etc/syndicate/hostname.pr deleted file mode 100644 index d6e903d..0000000 --- a/packaging/packages/synit-config/files/etc/syndicate/hostname.pr +++ /dev/null @@ -1,3 +0,0 @@ - complete>> -> -> diff --git a/packaging/packages/synit-config/files/etc/syndicate/interface-monitor.pr b/packaging/packages/synit-config/files/etc/syndicate/interface-monitor.pr deleted file mode 100644 index 1cfaeb3..0000000 --- a/packaging/packages/synit-config/files/etc/syndicate/interface-monitor.pr +++ /dev/null @@ -1,20 +0,0 @@ -; ready>> -> - - - -? [ - ? ?cap> [ - $cap { - machine: $machine - } - ] - - $machine ? ?r [ - $log ! - ?- $log ! - ] -] diff --git a/packaging/packages/synit-config/files/etc/syndicate/network.pr b/packaging/packages/synit-config/files/etc/syndicate/network.pr deleted file mode 100644 index 33c428f..0000000 --- a/packaging/packages/synit-config/files/etc/syndicate/network.pr +++ /dev/null @@ -1,29 +0,0 @@ -> - -> -> - - complete>> - -? > [ - -] - -? > [ - - >> -] - -? >> [ - ["udhcpc" "-i" $ifname "-fR"]> -] - -;--------------------------------------------------------------------------- - -; TODO: put interface-monitor in here diff --git a/packaging/packages/synit-config/files/etc/syndicate/services/docker.pr b/packaging/packages/synit-config/files/etc/syndicate/services/docker.pr new file mode 100644 index 0000000..b1e3ccf --- /dev/null +++ b/packaging/packages/synit-config/files/etc/syndicate/services/docker.pr @@ -0,0 +1,3 @@ +> + up>> +/var/log/docker.log"> diff --git a/packaging/packages/synit-config/files/etc/syndicate/sshd.pr b/packaging/packages/synit-config/files/etc/syndicate/services/sshd.pr similarity index 73% rename from packaging/packages/synit-config/files/etc/syndicate/sshd.pr rename to packaging/packages/synit-config/files/etc/syndicate/services/sshd.pr index ccf82a1..38336b3 100644 --- a/packaging/packages/synit-config/files/etc/syndicate/sshd.pr +++ b/packaging/packages/synit-config/files/etc/syndicate/services/sshd.pr @@ -1,6 +1,5 @@ > - ready>> + up>> complete>> - > diff --git a/packaging/packages/synit-config/files/sbin/synit-init.sh b/packaging/packages/synit-config/files/sbin/synit-init.sh index b68c5cc..bf6401c 100755 --- a/packaging/packages/synit-config/files/sbin/synit-init.sh +++ b/packaging/packages/synit-config/files/sbin/synit-init.sh @@ -19,7 +19,7 @@ mount -t cgroup2 none /sys/fs/cgroup mount -o rw,remount / -mkdir -p /run/etc/syndicate -mkdir -p /usr/local/etc/syndicate +mkdir -p /run/etc/syndicate/core +mkdir -p /usr/local/etc/syndicate/core exec /sbin/synit-pid1 diff --git a/packaging/packages/synit-config/files/usr/lib/synit/python/synit/daemon/interface_monitor.py b/packaging/packages/synit-config/files/usr/lib/synit/python/synit/daemon/interface_monitor.py index de8b9e2..1d608e2 100644 --- a/packaging/packages/synit-config/files/usr/lib/synit/python/synit/daemon/interface_monitor.py +++ b/packaging/packages/synit-config/files/usr/lib/synit/python/synit/daemon/interface_monitor.py @@ -10,6 +10,7 @@ import preserves.schema import threading import pyroute2 +from pr2modules.iwutil import IW schemas = preserves.schema.load_schema_file('/usr/share/synit/schemas/schema-bundle.prb') network = schemas.network @@ -74,9 +75,21 @@ administrative_state_map = { 'down': network.AdministrativeState.down(), } -def parse_interface(m): +def parse_interface(m, iw): + wireless_info = None + try: + wireless_info = iw.get_interface_by_ifindex(m['index']) + except Exception as e: + # presumably, no wireless extensions + pass + iftype = network.InterfaceType.normal() + if m['flags'] & 8: + iftype = network.InterfaceType.loopback() + if wireless_info is not None: + iftype = network.InterfaceType.wireless() return network.Interface(m.get_attr('IFLA_IFNAME'), m['index'], + iftype, administrative_state_map.get(m['state'], network.AdministrativeState.unknown()), operational_state_map.get(m.get_attr('IFLA_OPERSTATE', 'UNKNOWN'), @@ -107,6 +120,8 @@ def main(args): ip = pyroute2.IPRoute() ip.bind() + iw = IW() + @turn.on_stop_or_crash def shutdown(): ip.close() @@ -118,7 +133,7 @@ def main(args): for m in events: event_type = m['event'] if event_type == 'RTM_NEWLINK': - i = parse_interface(m) + i = parse_interface(m, iw) if (wireless_extension := m.get_attr('IFLA_WIRELESS', None)) is not None \ and wireless_extension.get_attr('SIOCGIWSCAN', None) is not None: turn.log.info(f'Interface {i.name} is performing a rescan') @@ -129,7 +144,7 @@ def main(args): linktable[i.index] = Link(None, None) linktable[i.index].update(machine_ds, i) elif event_type == 'RTM_DELLINK': - i = parse_interface(m) + i = parse_interface(m, iw) link = linktable.pop(i.index, None) if link is not None: link.update(machine_ds, None) diff --git a/packaging/packages/synit-config/sync-protocols.sh b/packaging/packages/synit-config/sync-protocols.sh new file mode 100755 index 0000000..70d2fc7 --- /dev/null +++ b/packaging/packages/synit-config/sync-protocols.sh @@ -0,0 +1,3 @@ +#!/bin/sh +rm -rf protocols +cp -rp ../../../protocols . diff --git a/protocols/schema-bundle.bin b/protocols/schema-bundle.bin index 33e029a..6d095a5 100644 --- a/protocols/schema-bundle.bin +++ b/protocols/schema-bundle.bin @@ -3,8 +3,8 @@ WidgetType horizontal´³refµ„³Sizing„„´³named³vertical´³refµ„³Sizing„„„„„³SortKey´³orµµ±double´³atom³Double„„µ±string´³atom³String„„„„³LeafType´³orµµ±blank´³lit³blank„„µ±text´³lit³text„„µ±slider´³lit³slider„„µ±image´³lit³image„„µ±icon´³lit³icon„„„„³NodeType´³orµµ±column´³lit³column„„µ±row´³lit³row„„„„³WidgetId³any³ Attribute´³rec´³lit³ attribute„´³tupleµ´³named³id´³refµ„³WidgetId„„´³named³key´³atom³Symbol„„´³named³value³any„„„„³ WidgetType´³orµµ±NodeType´³refµ„³NodeType„„µ±LeafType´³refµ„³LeafType„„„„³ WindowTitle´³rec´³lit³ window-title„´³tupleµ´³named³title´³atom³String„„„„„³WidgetInstance´³rec´³lit³widget-instance„´³tupleµ´³named³id´³refµ„³WidgetId„„´³named³instance´³embedded³any„„„„„³WindowCloseable´³rec´³lit³window-closeable„´³tupleµ„„„„³ embeddedType€„„µ³mime„´³schema·³version‘³ definitions·³Value´³rec´³lit³mime„´³tupleµ´³named³type´³atom³Symbol„„´³named³data´³atom³ ByteString„„„„„„³ embeddedType€„„µ³time„´³schema·³version‘³ definitions·³Stamp´³rec´³lit³rfc3339„´³tupleµ´³named³value´³atom³String„„„„„„³ embeddedType€„„µ³audio„´³schema·³version‘³ definitions·³Sink´³orµµ±speaker´³lit³speaker„„µ±headset´³lit³headset„„µ±earpiece´³lit³earpiece„„„„³Source´³orµµ± speakerphone´³lit³ speakerphone„„µ±headset´³lit³headset„„µ±handset´³lit³handset„„„„³ SinkMapping´³rec´³lit³alsa-sink-mapping„´³tupleµ´³named³abstract´³refµ„³Sink„„´³named³concrete´³atom³String„„„„„³HeadsetSpeakerPresent´³rec´³lit³headset-speaker-present„´³tupleµ„„„³HeadsetMicrophonePresent´³rec´³lit³headset-microphone-present„´³tupleµ„„„„³ embeddedType€„„µ³hayes„´³schema·³version‘³ definitions·³Result´³rec´³lit³result„´³tupleµ´³named³text´³atom³String„„´³named³tag´³refµ„³ MaybeString„„´³named³fields´³refµ„³ MaybeStrings„„„„„³ MaybeString´³orµµ±present´³atom³String„„µ±absent´³lit€„„„„³ MaybeStrings´³orµµ±present´³seqof´³atom³String„„„µ±absent´³lit€„„„„³ ModemPresent´³rec´³lit³modem„´³tupleµ´³lit³hayes„´³named³ -devicePath´³atom³String„„´³named³ dataspace´³embedded´³refµ„³InternalProtocol„„„„„„³ CommandResult´³rec´³lit³command-result„´³tupleµ´³named³ commandText´³atom³String„„´³named³results´³seqof´³refµ„³Result„„„´³named³ finalResult´³atom³String„„„„„³ExecuteCommand´³rec´³lit³execute-command„´³tupleµ´³named³ commandText´³atom³String„„´³named³replyTo´³refµ„³CommandContinuation„„„„„³InternalProtocol³any³CommandContinuation´³orµµ± replyWanted´³embedded´³refµ„³ CommandResult„„„µ± fireAndForget´³lit€„„„„³UnsolicitedResultCode´³rec´³lit³ unsolicited„´³tupleµ´³named³result´³refµ„³Result„„„„„„³ embeddedType€„„µ³network„´³schema·³version‘³ definitions·³Route´³rec´³lit³route„´³tupleµ´³named³ addressFamily´³refµ„³ AddressFamily„„´³named³ destination´³refµ„³RouteDestination„„´³named³priority´³atom³ SignedInteger„„´³named³ typeOfService´³atom³ SignedInteger„„´³named³ interfaceName´³refµ„³RouteInterface„„´³named³gateway´³refµ„³Gateway„„„„„³Gateway´³orµµ±addr´³atom³String„„µ±none´³lit€„„„„³ Interface´³rec´³lit³ interface„´³tupleµ´³named³name´³atom³String„„´³named³index´³atom³ SignedInteger„„´³named³administrativeState´³refµ„³AdministrativeState„„´³named³operationalState´³refµ„³OperationalState„„´³named³carrier´³refµ„³ CarrierState„„´³named³linkAddr´³atom³String„„„„„³ CarrierState´³orµµ± noCarrier´³lit³ -no-carrier„„µ±carrier´³lit³carrier„„„„³ AddressFamily´³orµµ±ipv4´³lit³ipv4„„µ±ipv6´³lit³ipv6„„µ±other´³atom³ SignedInteger„„„„³RouteInterface´³orµµ±name´³atom³String„„µ±none´³lit€„„„„³OperationalState´³orµµ±unknown´³lit³unknown„„µ±down´³lit³down„„µ±lowerLayerDown´³lit³lower-layer-down„„µ±testing´³lit³testing„„µ±dormant´³lit³dormant„„µ±up´³lit³up„„„„³RouteDestination´³orµµ±default´³lit³default„„µ±prefix´³rec´³lit³prefix„´³tupleµ´³named³net´³atom³String„„´³named³bits´³atom³ SignedInteger„„„„„„„„³AdministrativeState´³orµµ±unknown´³lit³unknown„„µ±down´³lit³down„„µ±up´³lit³up„„„„„³ embeddedType€„„µ³ telephony„´³schema·³version‘³ definitions·³CallId´³atom³ SignedInteger„³Address´³rec´³lit³address„´³tupleµ´³named³ +devicePath´³atom³String„„´³named³ dataspace´³embedded´³refµ„³InternalProtocol„„„„„„³ CommandResult´³rec´³lit³command-result„´³tupleµ´³named³ commandText´³atom³String„„´³named³results´³seqof´³refµ„³Result„„„´³named³ finalResult´³atom³String„„„„„³ExecuteCommand´³rec´³lit³execute-command„´³tupleµ´³named³ commandText´³atom³String„„´³named³replyTo´³refµ„³CommandContinuation„„„„„³InternalProtocol³any³CommandContinuation´³orµµ± replyWanted´³embedded´³refµ„³ CommandResult„„„µ± fireAndForget´³lit€„„„„³UnsolicitedResultCode´³rec´³lit³ unsolicited„´³tupleµ´³named³result´³refµ„³Result„„„„„„³ embeddedType€„„µ³network„´³schema·³version‘³ definitions·³Route´³rec´³lit³route„´³tupleµ´³named³ addressFamily´³refµ„³ AddressFamily„„´³named³ destination´³refµ„³RouteDestination„„´³named³priority´³atom³ SignedInteger„„´³named³ typeOfService´³atom³ SignedInteger„„´³named³ interfaceName´³refµ„³RouteInterface„„´³named³gateway´³refµ„³Gateway„„„„„³Gateway´³orµµ±addr´³atom³String„„µ±none´³lit€„„„„³ Interface´³rec´³lit³ interface„´³tupleµ´³named³name´³atom³String„„´³named³index´³atom³ SignedInteger„„´³named³type´³refµ„³ InterfaceType„„´³named³administrativeState´³refµ„³AdministrativeState„„´³named³operationalState´³refµ„³OperationalState„„´³named³carrier´³refµ„³ CarrierState„„´³named³linkAddr´³atom³String„„„„„³ CarrierState´³orµµ± noCarrier´³lit³ +no-carrier„„µ±carrier´³lit³carrier„„„„³ AddressFamily´³orµµ±ipv4´³lit³ipv4„„µ±ipv6´³lit³ipv6„„µ±other´³atom³ SignedInteger„„„„³ InterfaceType´³orµµ±loopback´³lit³loopback„„µ±normal´³lit³normal„„µ±wireless´³lit³wireless„„„„³RouteInterface´³orµµ±name´³atom³String„„µ±none´³lit€„„„„³OperationalState´³orµµ±unknown´³lit³unknown„„µ±down´³lit³down„„µ±lowerLayerDown´³lit³lower-layer-down„„µ±testing´³lit³testing„„µ±dormant´³lit³dormant„„µ±up´³lit³up„„„„³RouteDestination´³orµµ±default´³lit³default„„µ±prefix´³rec´³lit³prefix„´³tupleµ´³named³net´³atom³String„„´³named³bits´³atom³ SignedInteger„„„„„„„„³AdministrativeState´³orµµ±unknown´³lit³unknown„„µ±down´³lit³down„„µ±up´³lit³up„„„„„³ embeddedType€„„µ³ telephony„´³schema·³version‘³ definitions·³CallId´³atom³ SignedInteger„³Address´³rec´³lit³address„´³tupleµ´³named³ numberType´³refµ„³ NumberType„„´³named³number´³atom³String„„„„„³CallType´³orµµ±voice´³lit³voice„„µ±data´³lit³data„„µ±fax´³lit³fax„„„„³ CallState´³orµµ±hold´³lit³hold„„µ±original´³lit³original„„µ±connect´³lit³connect„„µ±incoming´³lit³incoming„„µ±waiting´³lit³waiting„„µ±end´³lit³end„„µ±alerting´³lit³alerting„„„„³ PlaceCall´³rec´³lit³ place-call„´³tupleµ´³named³ diff --git a/protocols/schemas/network.prs b/protocols/schemas/network.prs index 783d776..91f6a76 100644 --- a/protocols/schemas/network.prs +++ b/protocols/schemas/network.prs @@ -3,11 +3,24 @@ version 1 . Interface = . +; This is synthetic information, based on somewhat ad-hoc heuristics. It'd be nice if there was +; a better way to do this! Maybe someone can point me in the right direction! +; +InterfaceType = +/ ; `lo` and friends + =loopback +/ ; `eth0`, bridges, anything that isn't loopback and isn't wireless + =normal +/ ; 'wlan0' and friends + =wireless +. + AdministrativeState = / =unknown / =down