aboutsummaryrefslogtreecommitdiffstats
path: root/khash.h (unfollow)
Commit message (Collapse)AuthorFilesLines
2019-12-11Don't validate RTA_GATEWAY and fix an error stringLinus Nordberg1-8/+1
2019-12-11Stop passing devname and ifindex aroundLinus Nordberg3-25/+28
2019-12-11Ignore routes not for the wg interfaceLinus Nordberg3-9/+31
Adding 127.0.0.0/8 (lo) for example is not what we want. Didn't happen in tests/netsh.sh because the use of network namespaces.
2019-12-11server: restore leases from allowedips at startupLinus Nordberg2-1/+191
2019-12-11server: add --leasetime as a commandline optionLinus Nordberg3-8/+37
2019-12-11lease: handle allowedips updates and improve APILinus Nordberg4-136/+229
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