Age | Commit message (Collapse) | Author | Files | Lines |
|
The parameter was simply unused until this change was made. An Ipv6 can
have a prefix length between 48 and 64 bits.
Change-Id: I4b1512d5a4d7bbc2516221ea6808565eac0eb18f
|
|
It is vital that init_netns() is called first in order to initialize
default_nsfd.
Change-Id: Ic16646fa7d60c578056b17351c5fe2090a81dff0
|
|
Change-Id: I0b20e4870bf62df0a459a621a64a4e2795340ceb
|
|
They will be required by sgsnemu to implement ICMPv6 Router
Soliciations.
Change-Id: Ie878604f0fc0169cc98a1e9eee64b14d76be2c45
|
|
sgsnemu is a testing program and doesn't have a VTY iface to configure
its log levels, so let's simply enable INFO as a default.
Change-Id: I2a577f547b57fb0ab7b83de5c12da088697f3904
|
|
Looks like a bug introduced by I9b9c8fd6eeaaa7d190b8e2a34ca82088904c7708.
Change-Id: I38caf5541ca90638ed10714adfbb08120e5397b9
Fixes: CID#208656
|
|
Change-Id: I9b9c8fd6eeaaa7d190b8e2a34ca82088904c7708
|
|
Change-Id: Idd0ad8fa9c8e7ba0aeec1b52947598d4d297b620
|
|
in46a_from_eua() API documentation clearly states an array of 2 items
should be passed as pointer, but show_one_pdp() was passing only one,
which would end up in out-of-bounds writes on v4v6 EUAs.
Let's better use ippool to print allocated ip addresses instead of
parsing EUAs we sent some point in the past.
Change-Id: I7e164f40f50de43027bcd4464aa879450d2fb10e
|
|
Preparation for next commit, where this function will be needed inside
libmisc (lib/*).
Change-Id: Ibab4f6c09d1e5f0e9cfaea28ae1e7ab5b5c219b5
|
|
Change-Id: I27238c330f9b805ac9e734e735d2c7ae158fe524
|
|
It's clearer having size-related checks in one place for a data structure
in46_addr, instead of spread around the code.
Change-Id: Idc94bf0c8c01bb5a30e36d3c284b99f66b972abb
|
|
All addresses in struct tun_t were stored as an in_addr.
But IPv6 addresses need an in6_addr, so switch tun_t addresses
to the in64_addr wrapper struct.
This is an ABI break, as documented in TODO-RELEASE.
Fixes an out of bounds memcpy() identified by Coverity.
Change-Id: Idd2431ad25d7fa182e52e2bd5231ceb04d427c34
Related: CID#174278
|
|
The variable this->listsize is an unsigned int, but the format
string assumed ptrdiff_t. Found by Coverity.
Change-Id: Ib2a55907adae98f8aa7b079f1c9a3b4fc5f67fc5
Related: CID#188879
|
|
Coverity points out that addr.len was potentially being used
uninitialized, via calls to in46a_inc(&addr).
Change-Id: Idb67394e5f4c2072380a33f46c848d92c4317245
Related: CID#174189
|
|
When copying an address to a reused static hash table member
with memcpy(), this code mistakenly passed the size of a
pointer as the amount of bytes to be copied, rather than
the actual size of the address.
This means the IP pool could contain bogus IP addresses because
only addr->len (a uint8_t) and 3 further bytes of the address
were actually copied on 32 bit platforms. On 64 bit platforms,
a sufficient amount of bytes were copied for IPv4 to work
correctly, but too few bytes were copied for IPv6.
This problem was found by Coverity.
Replace the bogus memcpy() call with direct assignments to the
appropriate struct in64addr union members, and assert that the
length recorded for the address actually corresponds to the
length used by the address family (IP4, IPv6).
Change-Id: Ic21560f7519e776107485a8779702fb1279d065c
Related: CID#57921
|
|
The calloc() call in ippool_new() had two problems.
The first problem is benign: The order of arguments were reversed.
Pass the number of elements in the array first, then the size of
each element, as calloc() expects.
This problem was found by me. There are more instances of this
problem in this file, which I'll address in follow-up patches.
The second problem is that the requested allocation was larger than
necessary: The hash table is an array of pointers to ippoolm_t, not
an array of struct ippoolm_t. Fix the required size passed to calloc().
This problem was found by Coverity.
Change-Id: I93fa5bc539771ca19714f6a665558c9140e2ce07
Related: CID#57920
|
|
Coverity complains about a missing ioctl() return value check.
Check for failure of the TUNSETNOCSUM ioctl and log a warning
if it fails.
Change-Id: I88da2164d975d7a232619b8d31c5eadeef0f3a80
Related: CID#57661
|
|
Change-Id: Iacafa0919baebac6b5a799deb41a673c022c6743
Fixes: Coverity CID#135225
|
|
This way, the IP address / route handling between TUN devices and kernel
GTP can be shared, which will provide not only a unified codebase but
also a more consistent behavior.
This also paves the road for to use kernel GTP from sgsnemu in the future.
Related: OS#3214
Change-Id: Ic53a971136edd0d8871fbd6746d7b0090ce3a188
|
|
Change-Id: I02e057d30b6773c17ea6bc31094e53587971e9e7
|
|
Change-Id: I60cbca616a4f727e2374c52715f9286a0f4c5e4b
|
|
Change-Id: Ib021e392637a43d5cf1b40e0d50621fe7e854ba5
|
|
There's nothing really tun-specific about the adding and removing of
addresses to network devices. Let's generalize the related code.
Change-Id: I139a950dd81a4b1199953be1608cd109a060f562
|
|
There's nothing specific to tun devices in adding a route to the kernel.
Change-Id: Ib077934aa5f3c9bed06e2cf16a980c965a7a046d
|
|
There's nothing "tun" specific about that function, let's clarify that.
Change-Id: Iae7ced700245d6c1ac7e9807ab80d12fde8da116
|
|
sgsnemu (the only user of this API so far) has been modified to use the
new API with in46_addr.
FreeBSD code for IPv6 has not been tested.
Change-Id: Ie36afe6eaf393855a4a708000ef4ad0192bf4767
|
|
First of all, dstaddr can be NULL, avoid copying it in that case.
Second, we want to copy the addr data, not the pointer. I tested it and
the IP was not added (not shown in ip addr) until I copied the content
instead of the address.
Change-Id: I8da637b155f0e913cab6c5b0dde355c9f33375b5
|
|
Before this commit, when an MS requested an ipv4v6 context osmo-ggsn
returned an error stating the type was unknown, and this text was
printed in the log:
Processing create PDP context request for APN 'ims'
Cannot decode EUA from MS/SGSN: f1 8d
This patch has been tested with an MS running the 3 types of addresses:
- IPv4 and IPv6: no regressions observed, the context is activated and
packets are sent to the ggsn.
- IPv4v6: Wireshark correctly parses request and reponse, and then
ICMPv6 traffic from both sides. Finally I see the MS using the IPv4 and
IPv6 DNS addresses advertised and TCP traffic over IPv4 (because
probably my IPv6 network setup is not correct). I also checked I can
disable/enable data (pdp ctx delete and activate) several times without
any issue.
Change-Id: Ic820759167fd3bdf329cb11d4b942e903fe50af5
|
|
In any case, if we add support for ipv6 in tun_addaddr we will need
tun_setaddr (and also change the API of tun_addaddr to use in46_addr).
Change-Id: Iadf51379455174a642b477040ec96f28022c24c7
|
|
Change-Id: Id7f7d33a33730d57c5ecf7ebf5612f4744cf5163
|
|
netdev_ip_local_get() is a generalized version of tun_ip_local_get()
which supports the net device as argument, rather than a tun_t.
Change-Id: I072aa1a55e7bf110706e9207021b776d9b977fb6
|
|
* we have to use stataddr, not addr (dynamic)
* we have to multiply the length of the address by 8 to get its bit length
* we can simplify the -1 +1 logic (like dynamic)
Change-Id: I174102051bef95f7df34b7d7c480a00ae408be7d
Fixes: Coverity CID#174189
|
|
The 'struct tun' curently only has an in_addr (v4-only) member to
store the address of the tun device, so let's not attempt to store
an IPv6 address in it.
FIXME: This entire code needs an overhaul. The assumption that there's
only one address, and only either v6 or v4 is broken to begin with.
Change-Id: If0b626d688841d6e0a3867834f4cb1b70084050e
Fixes: Coverity CID#174278
|
|
Commit dda21ed7d4a897c9284c69175d0da598598eae40 modified previous calls
to ippool_new() removing the pass of flags to avoid allocating certain
problematic IPs from the pool to MS, such as the network, gateway and
broadcast IPs.
Today I did some unsucessful tests with osmo-ggsn with a pool "ip prefix
dynamic 176.16.222.0/24", and thus IP 176.16.222.0 was being assigned to
the MS. De-capsulated DNS packets were received in the tun interface,
but the Linux system in there was unable to correctly forward the
packets to the gateway interface connected to the Internet. However,
adding a second MS which got 176.16.222.1 had its packets forwarded
correctly.
However, previous implementation relies on flag IPPOOL_NOGATEWAY flag to
blindly blacklist first IP after the network ip (ie, .0 and .1 are
removed), which limits the IP reserved for the tun device to be .1. If a
different IP in the range is assigned, it may cause issues. As a result,
a blacklist is introduced in this commit to dynamically fetch the tun IP
address and exlucde it from the pool of available IPs.
Change-Id: I8e91f7280d60490c858a769dd578c1c8e54e9243
|
|
Add support for IPv4 and IPv6 global IPs. Also return the prefix length
of the IP address by using a in46_prefix.
Change-Id: I277af191dc611b6bbcb83479f4ae338083740322
|
|
Change-Id: I06e3e038afd8f7afaec2a3fa67b1616500c8db80
|
|
Take the chance this commit is changing test output to also remove use
of IPPOOL_NOGATEWAY which is going to be removed soon, and instead test
IPPOOL_NOBROADCAST.
Change-Id: I95c24bc690490155bec9e3933d678e4668d7745f
|
|
Change-Id: Ia2f9ac60f08823d5f7c1a76c0b7cbd65ac615e26
|
|
Change-Id: I8e24f95a88bef3a59006a89c219871e6156963d7
|
|
From getifaddrs(3) man:
"The data returned by getifaddrs() is dynamically allocated and should
be freed using freeifaddrs() when no longer needed"
Change-Id: If6300d1c8d36fcafef294a4c11bbda31a158bb9c
|
|
Change-Id: I33f65e404217e717bd795e5229c8d9456a7b3739
|
|
I'm not quite sure how I ended up doing this, but for some strange
reason the code before this commit is sending the ICMPv6 Router
Advertisements from some weird non-standard source address. This is
a violation of RFC4861 which clearly states that the source address
of router advertisements "MUST be the link-local address assigned to the
interface from which this message is sent."
Change-Id: Ib444af70fc8f0b433d371281601fd5a37b29039e
|
|
Change-Id: I9613ca3436e77ea132c47f0096df7c5050d7e826
|
|
Change-Id: I53a8a89abb0080a39a153e9d3864c17b29aa193c
|
|
We haven nobody maintaining this platform, let's remove it.
In fact, only Linux and FreeBSD are part of the jenkins build tests,
so even Apple/MacOS is up for disposal. However, as it's more
popular, let's keep the code.
Change-Id: Id6b8179259bacade52c39f96e688f828eff164ac
|
|
Change-Id: I285be20df76774ac7258b6edb3d4f2d28703757d
|
|
we rather pass the in46_prefix directly into ippool_new()
Change-Id: Iadf6274e881a9bfc75eb41f9380f5ae2d8c92a0f
|
|
This allows us to remove pool members without having to keep
a pointer to the pool around.
Change-Id: I9042eb85989c5451d7894678eca110dd19e78002
|
|
address
Change-Id: I42d41ec1370b9cc15d372b649d8e1bc78e76af9b
|