aboutsummaryrefslogtreecommitdiffstats
path: root/COPYING (unfollow)
Commit message (Collapse)AuthorFilesLines
2019-10-10Don't restore an lladdr as a leaseLinus Nordberg1-1/+1
2019-10-10FormattingLinus Nordberg1-5/+5
2019-10-01WIPLinus Nordberg2-1/+30
[server] Restore leases from allowedips at startup
2019-09-30[server] Make leasetime an optional command line argumentLinus Nordberg3-5/+12
2019-09-29[tests] Add test cases for lease handlingLinus Nordberg2-10/+281
2019-09-29Server side lease handlingLinus Nordberg3-79/+268
Extend when requested, release when being replaced. Separate address families so that one can be granted even when the pool for the other is empty.
2019-09-29Remove allowed-ips from peers as leases expireLinus Nordberg3-3/+76
2019-09-29Add draft of protocol specificationLinus Nordberg2-0/+273
2019-09-29Parametrise netns#, n# and ip#Linus Nordberg1-43/+37
Makes it easier to test with many peers.
2019-09-27Fix typo in the previous commits NULL checkLinus Nordberg1-1/+1
2019-09-10Fix incorrect use of pubkey ptr in new_lease()Thomas Gschwantner1-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.
2019-08-21Fix build issue that occurs on gcc debian 6.3.0-18Thomas Gschwantner1-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
2019-08-20Improve error handling and serializationThomas Gschwantner3-88/+88
2019-08-20Don't build wg-dynamic-client until it's fixedThomas Gschwantner1-1/+1
2019-08-17Initialize pools from routes via netlinkThomas Gschwantner5-29/+191
2019-08-02radix-trie: implement pool shadowingThomas Gschwantner2-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.
2019-07-18Move counting logic from lease.c to radix-trie.cThomas Gschwantner3-108/+94
2019-07-18Implement lease expirationThomas Gschwantner8-36/+120
2019-07-16radix-trie: inline find_node() into ipp_addpool()Thomas Gschwantner1-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.
2019-06-14Use epoll() instead of poll()Thomas Gschwantner4-123/+143
This enables us to later use the timeout parameter of epoll_wait() to timely remove expired leases.
2019-06-14Remove CLOCK_MONOTONIC commentThomas Gschwantner1-4/+0
The CLOCK_MONOTONIC change was reverted: https://git.kernel.org/torvalds/c/a3ed0e43
2019-06-14Fix use-after-free and memory leak in ipp_free()Thomas Gschwantner1-14/+11
2019-06-14Add missing #include in netlink.hThomas Gschwantner1-0/+1
2019-06-13Don't overwrite peer changes by othersThomas Gschwantner1-46/+28
2019-06-12Implement basic lease managementThomas Gschwantner10-162/+536
2019-06-02radix-trie: implement ipp_addrnd_* and relatedThomas Gschwantner2-70/+328
2019-06-02Add BUG() and BUG_ON()Thomas Gschwantner2-1/+4
2019-06-02radix-trie: allow both ipv4 and ipv6 debug outputThomas Gschwantner2-12/+30
2019-06-02radix-trie: fix fls/fls64Thomas Gschwantner1-6/+6
2019-06-02radix-trie: remove bits arg from radix_insert_v4/6Thomas Gschwantner2-6/+6
2019-06-02Use hashtable to match ll-ip with pubkeyThomas Gschwantner2-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.
2019-05-26Sleep lessLinus Nordberg1-3/+5
Only sleep after failed try_connect(), because it might fail quickly. The read should be blocking for 1s (SO_RCVTIMEO).
2019-05-26Use blocking I/O in clientLinus Nordberg1-119/+39
Avoiding the unnecessary complexity of non-blocking I/O.
2019-05-26No need to clear bits in pollfd reventsLinus Nordberg2-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."
2019-05-26Fix backwards logic in debug loggingLinus Nordberg1-2/+2
2019-05-26Implement client sending ip-request and configuring interfaceLinus Nordberg3-24/+521
2019-05-26Implement faked allocations, server sideLinus Nordberg3-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].
2019-02-25Specify scope id in addresses to ping6Linus Nordberg1-2/+2
Without scope id, ping6 on a Debian 9 fails with connect: Invalid argument
2019-02-25Accept multiple connections in one goThomas Gschwantner1-12/+28
2019-02-25Match incoming IP with pubkeyThomas Gschwantner2-11/+90
2019-02-25Implement a radix-trie for storing ip=pubkeyThomas Gschwantner3-1/+366
2019-02-13Move the google doc into the git repositoryDaniel Kahn Gillmor2-1/+103
2019-02-09Implement key=value parsingThomas Gschwantner4-46/+411
2019-01-27Fix licensing headersThomas Gschwantner5-13/+12
2019-01-26Implement basic validation and I/O multiplexingThomas Gschwantner3-25/+374