Symbol Global_Clatd_Config is duplicated when switch -fcommon to -fno-common
Bug: b/151457797
Test: mm
Change-Id: Ic6beb25cbc370d5bb085a3c569e66bae87446a49
This code/logic is spurious, because the majority of packets
are translated by eBPF, so whether the daemon runs or not,
usually just doesn't matter - bpf will handle them anyway.
As such what we actually care about is that the daemon
is terminated at the same time as the bpf map configuration
is removed. This is done by jni native code stopClatdProcess()
which is called from ClatCoordinator java code immediately
after maybeStopBpf().
Additionally on ipv6 address change we don't even terminate
the daemon - we simply stop the event loop, but still block
in main() until we receive SIGTERM/SIGKILL.
(This was done a while ago to fix a bunch of issues with
daemon dieing and being killed racing with each other)
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I86d203a244838166ed1fbec1bc48a680e433f9fa
Maciej Żenczykowskicommited 2023-03-16 09:36:10 +00:00
The interface address query doesn't use libnl anymore.
Needed for reducing the library dependency. Once the last libnl user
del_anycast_address() is removed, clatd can remove libnl. Less
dependency helps moving clatd to mainline.
parse_ifaddrmsg() is used to replaced with getaddr_cb() which updates
struct target variable until walking through all messages.
parse_ifaddrmsg() keeps the same behavior as getaddr_cb().
Bug: 212345928
Test: atest clatd_test and manual test
1. Connect to ipv6-only wifi.
2. Try IPv4 traffic.
$ ping 8.8.8.8
Change-Id: I56591ec851d3202e18cce9fce3995d658d9f07e2
1. Delete the test because it has been moved to netd.
- ConfigureIpv6Address
2. Refactor the existing test.
Assign IPv6 address directly because the address is applied by
cli argument now because configure_clat_ipv6_address() is
removed.
- Ipv6AddressChanged
Bug: 212345928
Test: atest clatd_test
Change-Id: I673327a36727e22f4ab23c191ee389fc1914016c
Delete the test because it has been moved to netd.
- ConfigureTunIpManual
Bug: 212345928
Test: atest clatd_test
Change-Id: I6b997aa0eb383aad04fd85618b64796f11c79cbf
Delete the test because it has been moved to netd.
- DetectMtu
Bug: 212345928
Test: atest clatd_test
Change-Id: I9b9d178ae6c2f93699697a46477414ea3c66d9a9
libipchecksum is becoming its own library in
frameworks/libs/net and its include files are no longer under
netutils/. Adjust clatd code accordingly.
Also reorder some include files as suggested by clang-format.
Test: m
Test: atest clatd_test
Test: connects to IPv6-only wifi, testipv4.com shows 10/10
Change-Id: I5e4c73065ce828123aef7e8851227f9bdf444ff9
Lorenzo Colittiauthored and Maciej Żenczykowskicommited 2021-12-14 03:19:12 +00:00
With clat ebpf offload of the receive path on 4.9+ P+ devices
this just doesn't matter any more.
Additionally:
- this is *much* simpler,
- reduces memory consumption,
- eliminates the need for memory locking privs,
- and allows us to increment max supported packet size,
which fixes a long outstanding terrible bug wrt. GRO'ed
packets being oversize and simply dropped.
So, win, win, win.
Test:
git grep '(^|[^t])ring[.][ch]'
git grep 'TP_FRAME_SIZE|TP_BLOCK_SIZE|TP_FRAMES|TP_FRAME_GAP|TP_NUM_BLOCKS|packet_ring|ring_create|ring_read'
come up empty
Verified ipv4 ping works on a flame device on an ipv6 only wireless network.
Bug: 130253220
Test: atest clatd_test netd_integration_test
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I676dfd16ffd2961f14a4e8fcd707c6f9f484e024
Maciej Żenczykowskicommited 2021-11-09 19:32:33 +00:00
Longer term we should probably just merge the clat_config
and tun_data structs, but not just yet.
Test:
git grep '(^|[^_])tun[.]h'
comes up empty
Bug: 144730808
Test: atest clatd_test netd_integration_test
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I7c3a986584aa3d02519545fb928457b61247ed14
Maciej Żenczykowskicommited 2020-06-02 15:56:53 -07:00
The IPv4 and IPv6 address assignment code, and its tests, were
migrated to ClatdController in Q, and this code has been unused
since then.
This code is not only unused, it also *should* never be used,
because if it were, many parts of 464xlat on Android would not
work as expected. This includes 464xlat BPF offload and data
usage accounting, both of which require netd to know exactly
which IPv4 and IPv6 addresses are used by clatd at any given
time.
Most of the code is deleted, but the function to generate random
checksum-neutral IIDs was moved to the tests instead.
This change does not delete the configuration file parsing code.
That will be done in a follow-up CL.
Bug: 144730808
Bug: 150738490
Test: atest clatd_test
Test: atest netd_integration_test
Test: IPv6-only wifi continues to work
Change-Id: I8265e9bb04d44ed1dda445fa91881fcd1601dc47
Lorenzo Colittiauthored and Maciej Żenczykowskicommited 2020-06-01 20:24:44 -07:00
This test isn't useful, because we always select the ipv6 address
within netd and pass it in via cli.
(and then we rename ClatdTest.ConfigureIpv6AddressCommandLine to
ClatdTest.ConfigureIpv6Address)
Test: builds
Bug: 144730808
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I5dbf1cd2a253a48de187faafa7c259ceab7dba67
Maciej Żenczykowskicommited 2020-01-30 10:05:17 +00:00
C++20 will require members in a designated initializer to be in order
unlike C99.
Bug: 139945549
Test: mm
Change-Id: I5d94739894a5882f571c1e0ddf069725f0c246e8
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
Nick Desaulnierscommited 2019-11-19 09:37:42 -08:00
This is to allow increasing pseudochecksum returned by 0xFFFF,
which is another form of 16-bit 1's complement 0 and thus irrelevant.
Test: builds, atest
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I8cfa04ed1c0bdde2a605cff258a12690748f3bd5
Maciej Żenczykowskicommited 2019-11-10 23:48:37 -08:00
This allows us to use it elsewhere, for example, in netd.
Bug: 65674744
Test: builds, boots
Test: atest clatd_test clatd_microbenchmark
Change-Id: Ic2cea1cd658ffd23ba9fbe45cb6b28e3b5312005
Lorenzo Colitticommited 2019-01-20 12:08:33 +09:00
This allows the address to be determined by netd and passed in,
which makes it possible for the rest of the OS to know what the
clatd IPv6 address is.
Bug: 65674744
Test: atest clatd_test
Test: IPv4 on IPv6-only networks continues to work
Test: clatd continues to avoid existing IPv4 addresses in 192.0.0.0/29
Test: passing NAT64 prefix, IPv4/IPv6 addresses on command line works
Change-Id: I8519c2f01b44022ef036c80aa0df32cd76003055
Lorenzo Colitticommited 2019-01-15 13:33:36 +09:00
Currently, when clatd detects that the IPv6 address on its
interface has changed, it updates its configuration accordingly.
This complicates the code, and it prevents us from determining
the IPv6 address in netd instead of clatd.
Stop doing this, and simply exit instead. The framework will
notice that the interface is gone and restart clatd, which will
then have the correct configuration (and, unlike current code,
the correct NAT64 prefix, if that has changed as well).
This change also allows us to drop CAP_NET_ADMIN and run clatd
as an unprivileged user with no capabilities.
Test: atest clatd_test
Test: changing IPv6 address on interface causes clatd to exit
Test: "adb shell cat /proc/$(adb shell pidof clatd)/status | grep Cap"
Change-Id: I296dcb185f603f685223b24ffefdf7a5c22b66e6
Lorenzo Colitticommited 2019-01-06 11:22:16 +09:00
Depend on tun_interface so we can add tests to clatd_test that
use a real interface instead of mocking everything out. Add a
simple test for determining the clat IPv6 address.
Test: atest clatd_test
Change-Id: I1f10c372388a7c663bebab3c45b206036a264673
Lorenzo Colitticommited 2019-01-06 11:22:16 +09:00
Previously the code would use 192.0.0.4 on all clat interfaces.
This works, but it has the problem when a clat interface goes
down, we do not reset TCP connections on its IP address if there
is another clat interface up.
Fix this by assigning every clat interface its own IP address in
192.0.0.0/29.
Bug: 12111730
Change-Id: I28c831acd93b0980efea8e90c1cdf8b607beac68
Lorenzo Colitticommited 2014-11-01 01:17:22 +09:00
- Add code to generate a random IPv6 address that's
checksum-neutral with the NAT64 prefix and clat IPv4 address.
- Only calculate the IP address after the NAT64 prefix is known.
- Because the clat IPv6 address is no longer determinisitic,
modify interface_poll so it checks whether the prefix has
changed instead of checking whether the IPv6 address has
changed.
- Add/update unit tests.
Change-Id: Ia53716ca5315ebdd0eaa3ad3a07552bf18e9dd5c
Lorenzo Colitticommited 2014-10-28 15:30:45 +09:00
This will allow us to bind the socket to a particular network.
(cherry picked from commit 10e8827d63)
Bug: 15340961
Change-Id: I0b62ef96364a90b9c0a9e3ac3ba97b5c19c89b69
Lorenzo Colitticommited 2014-06-13 11:47:50 +09:00
This will make it easier to use separate fds for reading and
writing in a future change.
(cherry picked from commit 91d0f1bc6d)
Bug: 15340961
Change-Id: I374b85f28ae570dc82d21e1ea82a2f072fd7fba3
Lorenzo Colitticommited 2014-06-13 11:47:42 +09:00
This will make it easier to use separate fds for reading and
writing in a future change.
Bug: 15340961
Change-Id: I5b081b05765cae0488ac599be5738ce9737cae41
Lorenzo Colitticommited 2014-06-10 21:32:52 +09:00
- Tidy up "signed vs unsigned" comparison
- Unconditionally initialize the "protocol" variable. This is a
false-positive warning as protocol is indeed initialized when used,
but GCC failed to detect the dependency between protocol and ip6.
Change-Id: I8146898d91d45531c3de73403e0df3330c0a2043