Giter Site home page Giter Site logo

l3roamd's Introduction

l3roamd

l3roamd, pronunced ɛl θriː ɹoʊm diː, is supposed to become a core part of future layer 3 mesh networks. At first it will be built to work with babeld.

l3roamd will be doing quite a few things:

  • manage a lot of host routes
  • integrate tightly with the mac80211 layer for monitor the presence of clients
  • manage a distributed database in tandem with all l3roamd nodes within the mesh [DB]
  • manage distribution of prefixes across the mesh (for router advertisements) [RA]
  • proxy neighbour discovery across the mesh
  • monitor babeld for duplicate host routes that this node also announces

Ideally, I'd like to split this up into multiple daemons communicating using standardized protocols:

[DB] Distributed Database

The database could become its own daemon. It's basically a key-value database that can answer a single question:

Does anyone know a client with this $MAC and if so, what IPs did it use and who has served this client recently?

This information does not need to be present on all nodes (though that's probably the naïve approach we'll take first). It just needs to be reasonable certain that a node noticing a client previously unknown to it can figure out whether that client has been known by some other node within the last, say, 15 minutes or so. In fact, it may suffice to share a client's information with just the nodes that are sending data to the client. This timeout depends primarily on the lifecycle of host routes within l3roamd.

The most important outcome of querying the database is actually: Notify any node that thinks it serves client to let go of it and instruct it to release all host routes. Taking over those routes is a welcome side effect as it improves roaming. In the worst case neighbour discovery will be able to re-establish these routes, though.

Data stored about clients

  • MAC
  • a set of nodes that have served this client before
  • a set of IPs
  • (optional) a set of multicast groups

This dataset needs some timeouts and so on.

Set of routeable client prefixes

A secondary usage of the database will probably be managing a set of prefixes used within the mesh. There will be some set of prefixes clients may use. This set may change at runtime depending on which prefixes may be used within the network. l3roamd needs to track these.

[RA] Router Advertisements

Any node should be able to announce a prefix (a /64) to be used by clients. This must be announced both within l3roamd and as a default route with a source prefix (set to the announced prefix!) through babeld. A metric (e.g. uplink bandwidth, reliability, ...) should be included, too. Nodes should announce a small subset of prefixes from nearby uplinks (actually, metric based) to clients via normal router advertisements. Lifetime of these prefixes should be managed such that clients always use the best uplink available. This is where early loadbalancing can reasonably take place. Clients are expected to cope with changing prefixes. Clients are also expected to hold onto deprecated prefixes as long as active connections require it. Routing for all, even deprecated, prefixes will be maintained as long as reasonably possible to avoid breaking a clients (TCP) connection. Multiple default routes for prefixes may be common (think multi homed AS), in this case loadbalancing is delegated to babeld. This means, that multiple nodes will announce the same set of prefixes with possibly different metrics. l3roamd will manages the prefixes it announces to a client on a per-client basis, if possibly. I.e. it will actively deprecate prefixes of clients it deems unreliably. This is likely to happen during roaming longer distances when a completely different set of uplinks should be used. As stated before, this will not break active connections.

Managing clients

l3roamd will directly monitor a set of wireless interfaces for clients. On the mac80211 layer it will monitor clients and act whenever a new client appears (query the database or create an entry) or when a client disappears (it should use its own timeout instead relying on the mac80211 internal timeout). In case of a disappearing client a node should remove all host routes for that client but not yet forget about them completely (in case the client re-appears). The routes presence in the routing table is controlled by the presence of the client (subject to some timeout). The routes presence in the database is subject to the timeout of the IPs lifetime (as was announced by the RA). Getting these mechanics right is crucial for sane roaming behaviour during bad network conditions. In worst case two nodes may have to switch routes fast and repeatably due to a client having bad connectivity to either node. These nodes may not be connected directly.

The host route lifecycle

Host routes need to have some kind of timeout. This directly correlates with management traffic overhead. It also affects the worst case amount of time a client will be unreachable in case of severe network conditions.

IPv4?

Well, not really. This is IPv6 only. We may, however, once everything works nicely, define a way for mapping IPv4 prefixes within IPv6 and rely on some other translation mechanism (SIIT, NIIT, whatever) to carry the payload. We may also extend the neighbour discovery proxy code to work with ARP. Ideally, this will be a seperate daemon.

Improvements welcome!

If you can improve this specifications (typos, better wording, restructering, ...) or even new important aspects, feel free to open a pull request. Please prefix your commits with "README: $my message" and try to summarize the changes in the commit message even if the commit message turns out to be longer than the change. Say, if you change a singel word, write a message like

README: corrected singel to single

This corrects a typo in the "Improvements welcome!" section.

This approach makes reviewing and reasoning about changes a lot easier.

Intercom Packets

There are currently three packet types used by l3roamd:

  • SEEK,
  • QUERY and
  • INFO

All packets can be sent either as unicast or multicast.

Header

SEEK

This is a multicast packet. SEEK is used to establish a route to an IPv6 address. The packet contains

l3roamd's People

Contributors

christf avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

l3roamd's Issues

config file and command parser

  • There should be a config file.
  • There should be a command interface.
  • Both share the same set of commands. The config file is, essentially, a script.

At the very least, these commands are required:

  • attach-mesh-interface
  • detach-mesh-interface
  • attach-client-interface
  • detach-client-interface
  • add-prefix
  • remove-prefix
  • set-export-table

remove routes when appropiate

  • periodically contact client (neighbor solicitation)
  • update timestamp on reply
  • purge clients that haven't responded for a while (also purge routes!)

please make cfg80211 dependency optional

when running l3roamd the kernel module cfg80211 must be loaded otherwise l3roamd exits with the message:
"nl80211 not found"

the error message seems to be originating from wifistations.c

106 int nl80211_id = genl_ctrl_resolve(ctx->nl_sock, "nl80211");
107 if (nl80211_id < 0) {
108 fprintf(stderr, "nl80211 not found.\n");
109 goto fail;
110 }

should l3roamd really depend on cfg80211 even if the system that it runs on does not contain wifi hardware?

Anleitung zur Installation

Gibt es irgendwo schon eine Anleitung wie man l3 baut und fürs debuggen auf einem Router laufen lässt?

Reach node responsible for a client using a special IP

Nodes could generate a special IP address generated using a clients MAC address (like: PREFIX::MAC), announce a local route and assign this address to lo. A node claiming a client would first look for a route to this special IP address and if it is present contact the node previously serving the client using this address to initiate a smooth handover.

Maybe use fec0::/10?

timers in l3roamd

  • re-trigger ND NS after a timeout (e.g. 15 minutes)
  • remove stale client and routes
  • send intercom packets three times, with 1s delay

Clientdatabase entry should be semigroup

Basically, we'd want to merge two client entries like this. A client entry contains:

  • the client's MAC address
  • timestamp when this client was last discovered
  • a list of IP addresses for that client, each with a last seen time

We need to merge it like this:

  • timestamp = max(timestamp_a, timestamp_b)
  • for each entry in ip_list_b check if it is in ip_list_a. if yes, update timestamp to max, else add entry as is

The idea would be that a node stores information about its clients. Other nodes can request that information. Multiple nodes may respond and the requesting node may already know a few IP addresses for the client. Upon receiving responses, the node would then combine them.

  • response (clientinfo) is sent using unicast and TTL = 1
  • After combining entries routes need to be updated. It may be necessary to derive a list of removed and added entries from the operation.

Repeat claim up to three times

In case of no response a claim should be tried up to three times, each after a short delay of about 1s if no response is received. Use the relinquished flag to determine when to stop.

obtaining IP-addresss when igmp_snooping=1 may take up to 5 minutes

I was able to capture this log. A new client (00:18:de:24:c6:7c) appears but it does not receive an IP address. In the same configuration in another connection attempt everything works.

What needs fixing?

Sun Nov 27 18:54:38 2016 daemon.info l3roamd[871]: client0: Checking Client 9c:eb:e8:20:92:a2 (active, br-client/7)
Sun Nov 27 18:54:38 2016 daemon.info l3roamd[871]: ACTIVE 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 (865.217705780)
Sun Nov 27 18:54:38 2016 daemon.info l3roamd[871]: Send NS to ff02::1:ff20:92a2
Sun Nov 27 18:54:38 2016 daemon.info l3roamd[871]: Add Address: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2
Sun Nov 27 18:54:38 2016 daemon.info l3roamd[871]: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 changes from ACTIVE to ACTIVE
Sun Nov 27 18:54:39 2016 daemon.info l3roamd[871]: event 19
Sun Nov 27 18:54:39 2016 daemon.info l3roamd[871]: client0: new station 00:18:de:24:c6:7c
Sun Nov 27 18:54:39 2016 daemon.info l3roamd[871]: new client 00:18:de:24:c6:7c on br-client
Sun Nov 27 18:54:39 2016 daemon.info l3roamd[871]: event 60
Sun Nov 27 18:54:39 2016 daemon.info l3roamd[871]: client0: Checking Client 00:18:de:24:c6:7c (active, br-client/7)
Sun Nov 27 18:54:39 2016 daemon.info hostapd: client0: STA 00:18:de:24:c6:7c IEEE 802.11: authenticated
Sun Nov 27 18:54:39 2016 daemon.info hostapd: client0: STA 00:18:de:24:c6:7c IEEE 802.11: associated (aid 1)
Sun Nov 27 18:54:39 2016 daemon.info l3roamd[871]: event 60
Sun Nov 27 18:54:39 2016 kern.warn kernel: [ 871.040000] REJECT(src client)IN=br-client OUT= MAC=ff:ff:ff:ff:ff:ff:00:18:de:24:c6:7c:08:00 SRC=0.0.0.0 DST=255.255.255.255 LEN=328 TOS=0x10 PREC=0x00 TTL=128 ID=0 PROTO=UDP SPT=68 DPT=67 LEN=308
Sun Nov 27 18:54:41 2016 daemon.info fastd[1597]: resolving host gw02.babel.ffm.freifunk.net' for peer <mesh_vpn_backbone_peer_fastd2>... Sun Nov 27 18:54:41 2016 daemon.info fastd[1597]: resolving host gw02.babel.ffm.freifunk.net' failed: Name or service not known
Sun Nov 27 18:54:42 2016 kern.warn kernel: [ 873.550000] REJECT(src client)IN=br-client OUT= MAC=ff:ff:ff:ff:ff:ff:00:18:de:24:c6:7c:08:00 SRC=0.0.0.0 DST=255.255.255.255 LEN=328 TOS=0x10 PREC=0x00 TTL=128 ID=0 PROTO=UDP SPT=68 DPT=67 LEN=308
Sun Nov 27 18:54:43 2016 daemon.info l3roamd[871]: client0: Checking Client 9c:eb:e8:20:92:a2 (active, br-client/7)
Sun Nov 27 18:54:43 2016 daemon.info l3roamd[871]: ACTIVE 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 (870.218194250)
Sun Nov 27 18:54:43 2016 daemon.info l3roamd[871]: Send NS to ff02::1:ff20:92a2
Sun Nov 27 18:54:43 2016 daemon.info l3roamd[871]: Add Address: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2
Sun Nov 27 18:54:43 2016 daemon.info l3roamd[871]: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 changes from ACTIVE to ACTIVE
Sun Nov 27 18:54:44 2016 daemon.info l3roamd[871]: Checking Client 00:18:de:24:c6:7c (active, br-client/7)
Sun Nov 27 18:54:48 2016 daemon.info l3roamd[871]: Checking Client 9c:eb:e8:20:92:a2 (active, br-client/7)
Sun Nov 27 18:54:48 2016 daemon.info l3roamd[871]: ACTIVE 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 (875.218978220)
Sun Nov 27 18:54:48 2016 daemon.info l3roamd[871]: Send NS to ff02::1:ff20:92a2
Sun Nov 27 18:54:48 2016 daemon.info l3roamd[871]: Add Address: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2
Sun Nov 27 18:54:48 2016 daemon.info l3roamd[871]: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 changes from ACTIVE to ACTIVE
Sun Nov 27 18:54:48 2016 kern.warn kernel: [ 880.240000] REJECT(src client)IN=br-client OUT= MAC=ff:ff:ff:ff:ff:ff:00:18:de:24:c6:7c:08:00 SRC=0.0.0.0 DST=255.255.255.255 LEN=328 TOS=0x10 PREC=0x00 TTL=128 ID=0 PROTO=UDP SPT=68 DPT=67 LEN=308
Sun Nov 27 18:54:49 2016 daemon.info l3roamd[871]: Checking Client 00:18:de:24:c6:7c (active, br-client/7)
Sun Nov 27 18:54:53 2016 daemon.info l3roamd[871]: Checking Client 9c:eb:e8:20:92:a2 (active, br-client/7)
Sun Nov 27 18:54:53 2016 daemon.info l3roamd[871]: ACTIVE 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 (880.219782270)
Sun Nov 27 18:54:53 2016 daemon.info l3roamd[871]: Send NS to ff02::1:ff20:92a2
Sun Nov 27 18:54:53 2016 daemon.info l3roamd[871]: Add Address: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2
Sun Nov 27 18:54:53 2016 daemon.info l3roamd[871]: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 changes from ACTIVE to ACTIVE
Sun Nov 27 18:54:54 2016 daemon.info l3roamd[871]: Checking Client 00:18:de:24:c6:7c (active, br-client/7)
Sun Nov 27 18:54:58 2016 daemon.info l3roamd[871]: Checking Client 9c:eb:e8:20:92:a2 (active, br-client/7)
Sun Nov 27 18:54:58 2016 daemon.info l3roamd[871]: ACTIVE 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 (885.220328500)
Sun Nov 27 18:54:58 2016 daemon.info l3roamd[871]: Send NS to ff02::1:ff20:92a2
Sun Nov 27 18:54:58 2016 daemon.info l3roamd[871]: Add Address: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2
Sun Nov 27 18:54:58 2016 daemon.info l3roamd[871]: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 changes from ACTIVE to ACTIVE
Sun Nov 27 18:54:59 2016 daemon.info l3roamd[871]: Checking Client 00:18:de:24:c6:7c (active, br-client/7)
Sun Nov 27 18:55:00 2016 kern.warn kernel: [ 891.740000] REJECT(src client)IN=br-client OUT= MAC=ff:ff:ff:ff:ff:ff:00:18:de:24:c6:7c:08:00 SRC=0.0.0.0 DST=255.255.255.255 LEN=328 TOS=0x10 PREC=0x00 TTL=128 ID=0 PROTO=UDP SPT=68 DPT=67 LEN=308
Sun Nov 27 18:55:02 2016 daemon.info fastd[1597]: resolving host gw02.babel.ffm.freifunk.net' for peer <mesh_vpn_backbone_peer_fastd2>... Sun Nov 27 18:55:02 2016 daemon.info fastd[1597]: resolving host gw02.babel.ffm.freifunk.net' failed: Name or service not known
Sun Nov 27 18:55:03 2016 daemon.info l3roamd[871]: Checking Client 9c:eb:e8:20:92:a2 (active, br-client/7)

as opposed to a different connection try, when everything seems to work in the same configuration, just a while later.
Nov 27 18:56:33 2016 daemon.info l3roamd[871]: Add Address: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2
Sun Nov 27 18:56:33 2016 daemon.info l3roamd[871]: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 changes from ACTIVE to ACTIVE
Sun Nov 27 18:56:34 2016 daemon.info l3roamd[871]: Checking Client 00:18:de:24:c6:7c (active, br-client/7)
Sun Nov 27 18:56:38 2016 daemon.info l3roamd[871]: Checking Client 9c:eb:e8:20:92:a2 (active, br-client/7)
Sun Nov 27 18:56:38 2016 daemon.info l3roamd[871]: ACTIVE 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 (985.257362680)
Sun Nov 27 18:56:38 2016 daemon.info l3roamd[871]: Send NS to ff02::1:ff20:92a2
Sun Nov 27 18:56:38 2016 daemon.info l3roamd[871]: Add Address: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2
Sun Nov 27 18:56:38 2016 daemon.info l3roamd[871]: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 changes from ACTIVE to ACTIVE
Sun Nov 27 18:56:39 2016 daemon.info l3roamd[871]: Checking Client 00:18:de:24:c6:7c (active, br-client/7)
Sun Nov 27 18:56:42 2016 daemon.info fastd[1597]: resolving host gw02.babel.ffm.freifunk.net' for peer <mesh_vpn_backbone_peer_fastd2>... Sun Nov 27 18:56:42 2016 daemon.info fastd[1597]: resolving host gw02.babel.ffm.freifunk.net' failed: Name or service not known
Sun Nov 27 18:56:43 2016 daemon.info l3roamd[871]: Checking Client 9c:eb:e8:20:92:a2 (active, br-client/7)
Sun Nov 27 18:56:43 2016 daemon.info l3roamd[871]: ACTIVE 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 (990.256023740)
Sun Nov 27 18:56:43 2016 daemon.info l3roamd[871]: Send NS to ff02::1:ff20:92a2
Sun Nov 27 18:56:43 2016 daemon.info l3roamd[871]: Add Address: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2
Sun Nov 27 18:56:43 2016 daemon.info l3roamd[871]: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 changes from ACTIVE to ACTIVE
Sun Nov 27 18:56:44 2016 daemon.info l3roamd[871]: Checking Client 00:18:de:24:c6:7c (active, br-client/7)
Sun Nov 27 18:56:44 2016 daemon.info l3roamd[871]: event 60
Sun Nov 27 18:56:47 2016 daemon.info l3roamd[871]: client0: event 19
Sun Nov 27 18:56:47 2016 daemon.info l3roamd[871]: client0: new station 00:18:de:24:c6:7c
Sun Nov 27 18:56:47 2016 daemon.info l3roamd[871]: new client 00:18:de:24:c6:7c on br-client
Sun Nov 27 18:56:47 2016 daemon.info l3roamd[871]: event 60
Sun Nov 27 18:56:47 2016 daemon.info l3roamd[871]: client0: Checking Client 00:18:de:24:c6:7c (active, br-client/7)
Sun Nov 27 18:56:47 2016 daemon.info hostapd: client0: STA 00:18:de:24:c6:7c IEEE 802.11: authenticated
Sun Nov 27 18:56:47 2016 daemon.info hostapd: client0: STA 00:18:de:24:c6:7c IEEE 802.11: associated (aid 1)
Sun Nov 27 18:56:47 2016 daemon.info l3roamd[871]: event 60
Sun Nov 27 18:56:47 2016 kern.warn kernel: [ 999.320000] REJECT(src client)IN=br-client OUT= MAC=ff:ff:ff:ff:ff:ff:00:18:de:24:c6:7c:08:00 SRC=0.0.0.0 DST=255.255.255.255 LEN=328 TOS=0x10 PREC=0x00 TTL=128 ID=0 PROTO=UDP SPT=68 DPT=67 LEN=308
Sun Nov 27 18:56:48 2016 daemon.info l3roamd[871]: client0: Checking Client 9c:eb:e8:20:92:a2 (active, br-client/7)
Sun Nov 27 18:56:48 2016 daemon.info l3roamd[871]: ACTIVE 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 (995.255729510)
Sun Nov 27 18:56:48 2016 daemon.info l3roamd[871]: Send NS to ff02::1:ff20:92a2
Sun Nov 27 18:56:48 2016 daemon.info l3roamd[871]: Add Address: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2
Sun Nov 27 18:56:48 2016 daemon.info l3roamd[871]: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 changes from ACTIVE to ACTIVE
Sun Nov 27 18:56:50 2016 kern.warn kernel: [ 1001.860000] REJECT(src client)IN=br-client OUT= MAC=ff:ff:ff:ff:ff:ff:00:18:de:24:c6:7c:08:00 SRC=0.0.0.0 DST=255.255.255.255 LEN=328 TOS=0x10 PREC=0x00 TTL=128 ID=0 PROTO=UDP SPT=68 DPT=67 LEN=308
Sun Nov 27 18:56:51 2016 daemon.info l3roamd[871]: Add Address: fe80::218:deff:fe24:c67c
Sun Nov 27 18:56:52 2016 daemon.info l3roamd[871]: Checking Client 00:18:de:24:c6:7c (active, br-client/7)
Sun Nov 27 18:56:53 2016 daemon.info l3roamd[871]: Checking Client 9c:eb:e8:20:92:a2 (active, br-client/7)
Sun Nov 27 18:56:53 2016 daemon.info l3roamd[871]: ACTIVE 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 (1000.256491255)
Sun Nov 27 18:56:53 2016 daemon.info l3roamd[871]: Send NS to ff02::1:ff20:92a2
Sun Nov 27 18:56:53 2016 daemon.info l3roamd[871]: Add Address: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2
Sun Nov 27 18:56:53 2016 daemon.info l3roamd[871]: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 changes from ACTIVE to ACTIVE
Sun Nov 27 18:56:56 2016 kern.warn kernel: [ 1008.210000] REJECT(src client)IN=br-client OUT= MAC=ff:ff:ff:ff:ff:ff:00:18:de:24:c6:7c:08:00 SRC=0.0.0.0 DST=255.255.255.255 LEN=328 TOS=0x10 PREC=0x00 TTL=128 ID=0 PROTO=UDP SPT=68 DPT=67 LEN=308
Sun Nov 27 18:56:57 2016 daemon.info l3roamd[871]: Checking Client 00:18:de:24:c6:7c (active, br-client/7)
Sun Nov 27 18:56:58 2016 daemon.info l3roamd[871]: Checking Client 9c:eb:e8:20:92:a2 (active, br-client/7)
Sun Nov 27 18:56:58 2016 daemon.info l3roamd[871]: ACTIVE 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 (1005.257325825)
Sun Nov 27 18:56:58 2016 daemon.info l3roamd[871]: Send NS to ff02::1:ff20:92a2
Sun Nov 27 18:56:58 2016 daemon.info l3roamd[871]: Add Address: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2
Sun Nov 27 18:56:58 2016 daemon.info l3roamd[871]: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 changes from ACTIVE to ACTIVE
Sun Nov 27 18:57:00 2016 daemon.info fastd[1597]: resolving host gw02.babel.ffm.freifunk.net' for peer <mesh_vpn_backbone_peer_fastd2>... Sun Nov 27 18:57:00 2016 daemon.info fastd[1597]: resolving host gw02.babel.ffm.freifunk.net' failed: Name or service not known
Sun Nov 27 18:57:02 2016 daemon.info l3roamd[871]: Checking Client 00:18:de:24:c6:7c (active, br-client/7)
Sun Nov 27 18:57:03 2016 daemon.info l3roamd[871]: event 60
Sun Nov 27 18:57:03 2016 daemon.info l3roamd[871]: client0: Checking Client 9c:eb:e8:20:92:a2 (active, br-client/7)
Sun Nov 27 18:57:03 2016 daemon.info l3roamd[871]: ACTIVE 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 (1010.258089745)
Sun Nov 27 18:57:03 2016 daemon.info l3roamd[871]: Send NS to ff02::1:ff20:92a2
Sun Nov 27 18:57:03 2016 daemon.info l3roamd[871]: Add Address: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2
Sun Nov 27 18:57:03 2016 daemon.info l3roamd[871]: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 changes from ACTIVE to ACTIVE
Sun Nov 27 18:57:04 2016 daemon.info l3roamd[871]: Got packet to 2a06:8187:fbab:2:218:deff:fe24:c67c
Sun Nov 27 18:57:04 2016 daemon.info l3roamd[871]: Looking for 2a06:8187:fbab:2:218:deff:fe24:c67c
Sun Nov 27 18:57:04 2016 daemon.info l3roamd[871]: Send NS to ff02::1:ff24:c67c
Sun Nov 27 18:57:04 2016 daemon.info l3roamd[871]: Got packet to 2a06:8187:fbab:2:218:deff:fe24:c67c
Sun Nov 27 18:57:04 2016 daemon.info l3roamd[871]: Add Address: 2a06:8187:fbab:2:218:deff:fe24:c67c
Sun Nov 27 18:57:04 2016 daemon.info l3roamd[871]: 2a06:8187:fbab:2:218:deff:fe24:c67c changes from INACTIVE to ACTIVE
Sun Nov 27 18:57:07 2016 daemon.info l3roamd[871]: Checking Client 00:18:de:24:c6:7c (active, br-client/7)
Sun Nov 27 18:57:07 2016 daemon.info l3roamd[871]: ACTIVE 2a06:8187:fbab:2:218:deff:fe24:c67c (1015.826378795)
Sun Nov 27 18:57:07 2016 daemon.info l3roamd[871]: Send NS to ff02::1:ff24:c67c
Sun Nov 27 18:57:07 2016 daemon.info l3roamd[871]: Add Address: 2a06:8187:fbab:2:218:deff:fe24:c67c
Sun Nov 27 18:57:07 2016 daemon.info l3roamd[871]: 2a06:8187:fbab:2:218:deff:fe24:c67c changes from ACTIVE to ACTIVE
Sun Nov 27 18:57:08 2016 daemon.info l3roamd[871]: Checking Client 9c:eb:e8:20:92:a2 (active, br-client/7)
Sun Nov 27 18:57:08 2016 daemon.info l3roamd[871]: ACTIVE 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 (1015.258922520)
Sun Nov 27 18:57:08 2016 daemon.info l3roamd[871]: Send NS to ff02::1:ff20:92a2
Sun Nov 27 18:57:08 2016 daemon.info l3roamd[871]: Add Address: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2
Sun Nov 27 18:57:08 2016 daemon.info l3roamd[871]: 2a06:8187:fbab:2:9eeb:e8ff:fe20:92a2 changes from ACTIVE to ACTIVE

No replicated database

It may suffice to only store client information on a single node. In case this node disappears, routes to clients can be rediscovered when needed. This may cause slight hiccups.

If we do this, we'd need the ability to query the network for a specific client given its MAC address.

Basically we need two new packet types:

  • request information about a MAC (should be flooded for now)
  • response containing list of IPs for that MAC

Information about a MAC should be requested whenever a new client appears, even if local information is available

The request actually claims the client. If another node thinks it owns the client, it'll compare the timestamp. If the other node has a younger timestamp, it won't respond but instead claim the client itself (by sending a request).Otherwise, it'll respond and let got of the client.

  • clientmgr_handle_claim dazu umbauen

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.