The "net conn" net-shell command will print information
about currently active TCP connections.
Change-Id: I6ef67887997553f4bfad14bcfd4fcde0e062a77b
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
This is to be used in net-shell to view currently active
TCP connections.
Change-Id: I9c2a69e3ab6013835a42dfde47d580623998b3fa
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
The "net conn" net-shell command will print out currently
active network contexts (sockets).
Change-Id: Iaf3ced1a4b7ab10291c0b87eecd9e9bedb486e06
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
The address family of local endpoint address was not
set in net_context. This caused wierd issues as the
address family was always AF_UNSPEC.
Change-Id: Ibd05f9af86a8bdea3399ad20e3b84bd7d43a6415
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
This is to be used in net-shell to view currently
available network connections.
Change-Id: Iadb6555ed6db4e8fb0639e6d0dcf1eccd970acca
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
If IP stack offloading is enabled, then call corresponding
L2 driver when corresponding net_context API function is
called. The L2 driver can then do its magic to send/recv
IP packet or do what ever with it.
Change-Id: I26695cee6feb80a41923db0165f22d94477333be
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
For dual IPv6 and IPv4 stack, the limit of network connections needs
to be increased as the default value of 4 is too small in this case.
Change-Id: If031ae9ee1dd095d20ee6a677ef8c678055ecfb0
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
Return -ESHUTDOWN when this flag is set.
Change-Id: Ia2f5d8890b70652c1c348f25d4879248540ac66e
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
When preparing a non-data segment, the FIN flag was not set in the sent
segment. Do it now.
Also, set NET_TCP_IS_SHUTDOWN when transitioning to this state. This
flag isn't currently used beyond sending data segments, but will be
checked before the application tries to send data, or when data is
received from the network.
Change-Id: I6fb4f8fc7aa2a433522075d49307e8615ec6f2c7
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
This cleans up some code, and fixes some wrong assertions. For
instance, the following code was present in net_context_bind():
NET_ASSERT(context >= &context[0] || \
context <= &context[NET_MAX_CONTEXT]);
The intention was to see if the context (which is a pointer to a
net_context struct) was part of the "contexts" array, but instead did
something else entirely.
Change-Id: Iae8161990987ec0c3632ee493ff9248e789683dc
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
We need to have a menuconfig for setting up networking
sample application IP address. This way we can properly
use strtol() which is only available if the
CONFIG_MINIMAL_LIBC_EXTENDED is selected.
Change-Id: I749ea444584b3e15d4a6fee9cd9065aba22a7278
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
The net_tcp_release() function was checking if the passed pointer to a
net_tcp struct was valid by checking if the pointer was within the
range of the tcp_context array.
However, the check was inverted, and the function was returning -EINVAL
every time a pointer to any element of the tcp_context array was
passed.
Because of this, TCP connections were never properly disposed, TCP
context were most likely left in either active or passive close states,
and new connections could never be established again.
Change-Id: I2ed368157349f0ca5641f7d15a555c0035e1a9e2
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
Use the appdatalen value calculated by packet_received(). This avoids
recalculating the acknowledgement delta by reusing the same value that
is provided to the application.
In particular, sending a 30-byte packet to a Zephyr server would
produce an ACK# that, instead of being 30 higher than the sequence
number, was 40 below that number, because -NET_IPV6H_LEN was being
considered in the calculation.
Wireshark seems happy with this value, with no retransmissions from the
Linux end to the Zephyr end.
Change-Id: I35507fc2b880b4bae97277951d6d1b74a83a88c2
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
This change moves the handling of passive close to a callback function
that handles the {CLOSE_WAIT, LAST_ACK} states. This cleans up the
callback that handles the established estate, leaving only the handling
for that specific state in the tcp_established() callback.
Also, send the correct acknowledge number and send only an ACK rather
than a FIN+ACK packet while transitioning from ESTABLISHED to
CLOSE_WAIT.
These changes makes Wireshark happy when the connection is closed.
Change-Id: Ieeced5dff845f53a6b61af973dcf0fe3b7b8601f
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
This aids in debugging logs to know which state structure transitioned
to which state.
Change-Id: I5bb1f34431e162f422513fcb40a2178e24e6fd84
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
The function net_context_accept() was dereferencing context->tcp
without asserting it's not NULL, even if the protocol was not TCP.
There's a check prior to that to ensure it's a SOCK_STREAM, but that
wasn't sufficient to ensure that the pointer wouldn't be dereferenced
even if invalid.
Change-Id: Ie4f6b9792f6ebb90198ba3a845bb1b83ac450c38
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
During handshake, a new network context is created. But, before that,
the master TCP state is reset to the LISTEN state. Although correct by
the state machine definition, the TCP state of the master socket is
swapped with the newly-created context for the client socket.
This allows the client to keep the sequence numbers and other critical
flags. So, after swapping the TCP states, we were transitioning between
the LISTEN and ESTABLISHED states, which is wrong, and the new state
would be kept in the default, CLOSED state, which would make it
impossible to connect to a port a second time.
Change-Id: I3a30c632be0da29960c632d1ee62d1c4ec9d7348
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
One case was not covered by a NET_DBG call, so add it.
Change-Id: Ie2b1f5cf6cdf62d39a3d12d0533e57e126266451
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
The timeout was transitioning the master socket to the CLOSED state,
which made the port unconnectable if a handshake failed to finish in
one second.
Also cancel the ACK timeout when transitioning to ESTABLISHED;
otherwise, the connection would be closed after a second.
As a bonus, print the timeout in miliseconds.
Change-Id: I8e2d93cf0bbd706397909a2bb97b1821964d25da
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
Create utility function that creates an UDP packet.
Use that function by net_udp_append().
Change-Id: I65b911a41910f812f8754ac1c787790ba63c637d
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
User is able to setup sample net apps IP addresses
via config file.
Change-Id: I7fbbda30d474095da717ed300977761857f509b8
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
The xid was printed in network byte order when msg was received.
Added also expected xid vs received xid if the packet recv
failed.
Change-Id: I6311033600f8e61378a8a1fb126074e83f98f142
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
This enables the management stack information to be shown
in the net shell.
Change-Id: I6cf1d8b9a0d2da1623ce99b7726ea72a9769f2d8
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
RPL requires 300 bytes more stack in RX path.
Change-Id: I7ebe5ec6470f6766997f8b5eb199fc55b059513a
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
This way we see all the stack related Kconfig options in
one place.
Change-Id: I01dd566525823c96ee8c000435e27619fc8699c4
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
The "net stacks" command will print information about
stack usage in the networking sub-system.
Change-Id: I568445e99158972b13dc10a1bb720ba9650b7ab4
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
The macro defines the stack as usual, but if user has
enabled net shell (CONFIG_NET_SHELL), then additional
information about the stack is stored in net_shell
linker section. The information in the net_shell linker
section is then used to print information about the
stacks in the networking sub-system.
Change-Id: Ic6e9f16a73a192b9a59d32a6d0070322382f98bd
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
This no longer apply as there is no longer a extra reference needed.
Change-Id: I84f50da7e15f31722cd99b906f9dd987a10ce2dd
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
If NET_DEBUG is enabled within tcp.c, all state transitions are checked
against the TCP state machine specification. If an invalid state
transition is found, a debugging message is printed.
Change-Id: I8fe521a74da6c57e8aeee32e99b25c3d350fd4b0
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
The whole function is only built if TCP is also built.
Change-Id: I0ed71273fa8db52b3e4c18d4b7b1766593f15f5a
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
This sends FIN|ACK in one single segment instead of two while closing
a connection.
Change-Id: I80ff3da74deab2caffb69777438a0d13f75b4b32
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
The sanity checker should check for these as well eventually.
Change-Id: Ia22c8d0e000ee315ee2f582caa5a6b0c721e8b5f
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
packet_received() does most of our work here already. The appdata
needs to be filled in correctly for TCP packets, which needed the
header size computation to be abstracted out of the ACK code.
Change-Id: Ifeb87c8ddcaa6f4b116214a3b3fb737ab03286f1
Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
More protocols are incoming. Put the UDP specific stuff (address
wrangling and connection creation) in a separate function, leaving the
synchronous handling in place for other protocols to use.
No behavior changes.
Change-Id: I67fd9f683314ca9b2e671b84c46b9392db9496b2
Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
I believe the original intention was to have code similar to:
buf = net_ipv6_create(...)
buf = net_udp_append(...)
buf = net_tcp_append(...)
buf = net_ipv6_finalize(...)
However, each protocol has different ways of creating packets and
checking invariants. Thus, the code now does something similar to:
if (proto == UDP) {
// original UDP code
} else if (proto == TCP) {
// TCP code, which creates the IP header as well
} else {
// unknown protocol
}
Which negates the need of such check in net_udp_append().
Change-Id: I7f05b7d556462b0db35aaecdf060539f8c246e8c
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
The call would eventually return -EDESTADDRREQ, however -ENOTCONN is
the sane error value in this case.
Change-Id: I6c24bf9bf2ecc4bff6a615567547390e6f5b7d77
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
Adds support to send TCP packets using net_context_send() and
net_context_sendto() functions.
There's one behavior change: net_udp_append() will only append UDP
headers+payload if the context protocol matches. This would allow
sending only IP packets from Zephyr. Proper support for raw packets
should be added later if required, so the new behavior is to return
-EPROTONOSUPPORT if trying to send a packet through an
-unknown/unsupported protocol.
Note that sending packets outbound from Zephyr is still WIP; this is
just a step in the general direction of making it work.
Change-Id: Idcf26ad3820e85f1495e7029aed94f3b7abf25ed
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
Both functions perform the same logic, except that the sendto() variant
expects two more parameters to specify the destination address.
Just obtain that from the context in the send() case and forward the
information to the sendto() variant.
Reduces code slightly, while also making it easier to add more
protocols later.
Change-Id: I48da621d8788d5ba2cddaf2982324d3e896c13c3
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
When debugging is enabled, compilation fails with an error, similar to
this:
... net/yaip/net_mgmt.c:155:35:
error: 'struct k_sem' has no member named 'sem'
k_sem_count_get(&network_event.sem));
^
As 'network_event' is a k_sem, there is no '.sem' field.
Change-Id: I09fb46ec02b62c30b9a12972abcaea8a36b84610
Signed-off-by: Vinicius Costa Gomes <vinicius.gomes@intel.com>
Current reassembly of 802.15.4 packets works only if fragments are
in correct order. But as per RFC 6282 reassembly should be based on
offset parameter in fragmentation header.
Change-Id: Icdcb10b9aa8f5837063b0201a64f8eb050c75681
Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
Fragments reassembly was never used in l2.
Change-Id: Ia06ccbcd591ff79c43915e81c0b273533c607aa6
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
Current value is not enough anymore it seems. (depends however, if some
debug output is enabled or not).
Would be much better if the build system could automatically compute
such size.
Change-Id: I9052616a7923e484664e4f5c7760e6a6e1152c63
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
There is something wrong with Arduino 101 ARC compiler.
Sanitycheck runs ethernet tests for this board basically using
this command:
cd tests/drivers/build_all
make pristine && make CONF_FILE=ethernet.conf BOARD=arduino_101_sss
Which then gives following warning
warning: missing braces around initializer [-Wmissing-braces]
which is then converted to error in sanitycheck.
Change-Id: I822c599cb172825a79b5b8e4a71cb9252757a435
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>