aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* WIPln/filter-routesLinus Nordberg2019-10-174-10/+30
|
* fix testsLinus Nordberg2019-10-161-15/+17
|
* Merge branch 'ln/devel' into HEADLinus Nordberg2019-10-169-174/+1160
|\
| * [server] Restore leases from allowedips at startupLinus Nordberg2019-10-112-1/+191
| |
| * [server] Make leasetime a commandline optionLinus Nordberg2019-10-113-7/+25
| |
| * [tests] Add test cases for lease handlingLinus Nordberg2019-10-102-44/+347
| |
| * Server lease handling.Linus Nordberg2019-10-104-126/+322
| |
| * Add draft of protocol specificationLinus Nordberg2019-10-012-0/+273
| |
* | Fix parsing issue with split messagestg/develThomas Gschwantner2019-10-092-17/+18
| | | | | | | | | | | | | | Previously this would trigger a BUG_ON() since the calculation of length & offset was wrong since we added the previous part of the buffer (req->buf) in parse_request(). This meant handle_request() couldn't know how much bytes where actually left in the buffer or their offset.
* | radix-trie: allow full use of the v4 address spaceThomas Gschwantner2019-09-293-5/+5
| |
* | Rename struct ip_pool to be more descriptiveThomas Gschwantner2019-09-283-100/+101
| |
* | Fix random_bounded() to always be in [0, bound)Thomas Gschwantner2019-09-283-15/+19
| | | | | | | | | | Previously random_bounded(1) would return values in [0, 1], while values > 1 would return [0, bound).
* | Fixup client, including a lot of refactoringThomas Gschwantner2019-09-284-364/+197
| |
* | Extract all RTNETLINK code into ipm.{c,h}Thomas Gschwantner2019-09-286-127/+262
| |
* | Serialize/deserialize messages into a structThomas Gschwantner2019-09-283-305/+320
|/ | | | | | Instead of a list of attributes, parse messages into a proper struct to avoid duplicating code in the server/client for handling this list, as well as making parsing nicer in general.
* Fix typo in the previous commits NULL checkLinus Nordberg2019-09-271-1/+1
|
* Fix incorrect use of pubkey ptr in new_lease()Thomas Gschwantner2019-09-101-3/+16
| | | | | | | | | Before this, leases_ht would store the (temporary) pointer to pubkey that's given to new_lease() directly. The memory it's pointing to is overwritten as soon as a new connection comes in however and thus breaking the hashtable. Instead make our own copy of the pubkey and store the pointer to that.
* Fix build issue that occurs on gcc debian 6.3.0-18Thomas Gschwantner2019-08-211-1/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | CC lease.o In file included from /usr/include/arpa/inet.h:22:0, from lease.c:3: lease.c: In function 'new_lease': lease.c:93:30: error: 'const struct in6_addr' has no member named 's6_addr32' bool wants_ipv6 = !ipv6 || !IN6_IS_ADDR_UNSPECIFIED(ipv6); ^ lease.c:93:30: error: 'const struct in6_addr' has no member named 's6_addr32' bool wants_ipv6 = !ipv6 || !IN6_IS_ADDR_UNSPECIFIED(ipv6); ^ lease.c:93:30: error: 'const struct in6_addr' has no member named 's6_addr32' bool wants_ipv6 = !ipv6 || !IN6_IS_ADDR_UNSPECIFIED(ipv6); ^ lease.c:93:30: error: 'const struct in6_addr' has no member named 's6_addr32' bool wants_ipv6 = !ipv6 || !IN6_IS_ADDR_UNSPECIFIED(ipv6); ^ lease.c: In function 'leases_refresh': lease.c:213:10: error: 'const struct in6_addr' has no member named 's6_addr32' if (!IN6_IS_ADDR_UNSPECIFIED(ipv6)) ^ lease.c:213:10: error: 'const struct in6_addr' has no member named 's6_addr32' if (!IN6_IS_ADDR_UNSPECIFIED(ipv6)) ^ lease.c:213:10: error: 'const struct in6_addr' has no member named 's6_addr32' if (!IN6_IS_ADDR_UNSPECIFIED(ipv6)) ^ lease.c:213:10: error: 'const struct in6_addr' has no member named 's6_addr32' if (!IN6_IS_ADDR_UNSPECIFIED(ipv6)) ^ <builtin>: recipe for target 'lease.o' failed make: *** [lease.o] Error 1
* Improve error handling and serializationThomas Gschwantner2019-08-203-88/+88
|
* Don't build wg-dynamic-client until it's fixedThomas Gschwantner2019-08-201-1/+1
|
* Initialize pools from routes via netlinkThomas Gschwantner2019-08-175-29/+191
|
* radix-trie: implement pool shadowingThomas Gschwantner2019-08-022-27/+60
| | | | | | | | | | | | | | Pools are created from routes which can overlap. Consider the following: ip route add 192.168.4.0/28 ip route add 192.168.4.0/24 sleep 3600 ip route del 192.168.4.0/24 Here, the pool created from the first route is being shadowed by the pool from the second route. However, since the second pool is later removed again we cannot simply combine them. So instead this commit shadows them, to avoid them being double counted.
* Move counting logic from lease.c to radix-trie.cThomas Gschwantner2019-07-183-108/+94
|
* Implement lease expirationThomas Gschwantner2019-07-188-36/+120
|
* radix-trie: inline find_node() into ipp_addpool()Thomas Gschwantner2019-07-161-16/+8
| | | | | The way find_node() was written to suit ipp_addpool() means it's not really generic and rather confusing, so we inline it instead.
* Use epoll() instead of poll()Thomas Gschwantner2019-06-144-123/+143
| | | | | This enables us to later use the timeout parameter of epoll_wait() to timely remove expired leases.
* Remove CLOCK_MONOTONIC commentThomas Gschwantner2019-06-141-4/+0
| | | | | | The CLOCK_MONOTONIC change was reverted: https://git.kernel.org/torvalds/c/a3ed0e43
* Fix use-after-free and memory leak in ipp_free()Thomas Gschwantner2019-06-141-14/+11
|
* Add missing #include in netlink.hThomas Gschwantner2019-06-141-0/+1
|
* Don't overwrite peer changes by othersThomas Gschwantner2019-06-131-46/+28
|
* Implement basic lease managementThomas Gschwantner2019-06-1210-162/+536
|
* radix-trie: implement ipp_addrnd_* and relatedThomas Gschwantner2019-06-022-70/+328
|
* Add BUG() and BUG_ON()Thomas Gschwantner2019-06-022-1/+4
|
* radix-trie: allow both ipv4 and ipv6 debug outputThomas Gschwantner2019-06-022-12/+30
|
* radix-trie: fix fls/fls64Thomas Gschwantner2019-06-021-6/+6
|
* radix-trie: remove bits arg from radix_insert_v4/6Thomas Gschwantner2019-06-022-6/+6
|
* Use hashtable to match ll-ip with pubkeyThomas Gschwantner2019-06-022-31/+661
| | | | | | The link-local IP is always /128, so using a hashtable is more appropriate here. We only use the lower 64 bits as key, since the first 64 bits of link-local addresses are always the same.
* Sleep lessLinus Nordberg2019-05-261-3/+5
| | | | | Only sleep after failed try_connect(), because it might fail quickly. The read should be blocking for 1s (SO_RCVTIMEO).
* Use blocking I/O in clientLinus Nordberg2019-05-261-119/+39
| | | | Avoiding the unnecessary complexity of non-blocking I/O.
* No need to clear bits in pollfd reventsLinus Nordberg2019-05-262-5/+0
| | | | | | | | POSIX says: "In each pollfd structure, poll() shall clear the revents member, except that where the application requested a report on a condition by setting one of the bits of events listed above, poll() shall set the corresponding bit in revents if the requested condition is true."
* Fix backwards logic in debug loggingLinus Nordberg2019-05-261-2/+2
|
* Implement client sending ip-request and configuring interfaceLinus Nordberg2019-05-263-24/+521
|
* Implement faked allocations, server sideLinus Nordberg2019-05-263-104/+433
| | | | | | | | | | Reject clients not connecting from an IPv6 address. Reject clients not connecting from the correct port. Fake address allocation. Update allowed-ips with leases handed out. Send response messages. Extend protocol to include lease start and lease time, errno and errmsg. Move common code to common.[ch].
* Specify scope id in addresses to ping6Linus Nordberg2019-02-251-2/+2
| | | | | | Without scope id, ping6 on a Debian 9 fails with connect: Invalid argument
* Accept multiple connections in one goThomas Gschwantner2019-02-251-12/+28
|
* Match incoming IP with pubkeyThomas Gschwantner2019-02-252-11/+90
|
* Implement a radix-trie for storing ip=pubkeyThomas Gschwantner2019-02-253-1/+366
|
* Move the google doc into the git repositoryDaniel Kahn Gillmor2019-02-132-1/+103
|
* Implement key=value parsingThomas Gschwantner2019-02-094-46/+411
|
* Fix licensing headersThomas Gschwantner2019-01-275-13/+12
|