Commit Graph

2457 Commits

Author SHA1 Message Date
Jukka Rissanen 0b8e5f3729 net: shell: Print info about active TCP connections
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>
2016-12-02 12:41:16 +02:00
Jukka Rissanen 797b642a61 net: tcp: Add util to loop through all TCP connections
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>
2016-12-02 12:41:16 +02:00
Jukka Rissanen 9148567dbd net: shell: Add command to view active network contexts
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>
2016-12-02 12:41:16 +02:00
Jukka Rissanen 928e7c4824 net: Local address family was not set in net_context
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>
2016-12-02 12:41:16 +02:00
Jukka Rissanen 1b9b1d46c3 net: Add util to loop all network contexts
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>
2016-12-02 12:41:16 +02:00
Jukka Rissanen e765a5a2e2 net: Add initial IP stack offloading support
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>
2016-12-02 12:41:16 +02:00
Jukka Rissanen 07cd16388e net: Increase the default network connection count
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>
2016-12-02 12:41:16 +02:00
Leandro Pereira 1501cb1076 net: tcp: Check for NET_TCP_IS_SHUTDOWN flag when sending/receiving
Return -ESHUTDOWN when this flag is set.

Change-Id: Ia2f5d8890b70652c1c348f25d4879248540ac66e
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
2016-12-02 12:41:16 +02:00
Leandro Pereira 35bf12c5ac net: tcp: Add more debugging messages when disposing connections
Change-Id: I4c6da19cd1b697be44072a15d6b1f2f5a6b3c5de
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
2016-12-02 12:41:16 +02:00
Leandro Pereira 1223c2b674 net: tcp: Send FIN packet when transitioning to LAST_ACK
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>
2016-12-02 12:41:16 +02:00
Jukka Rissanen 2b2dce28cd net: rpl: Use unified kernel API
Dropping legacy API.

Change-Id: Iee4b868e0b23b4e656ef2241872d4cfc8b0fd0de
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-12-02 12:41:16 +02:00
Leandro Pereira 2a14a59162 net: Use PART_OF_ARRAY() macro
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>
2016-12-02 12:41:16 +02:00
Jukka Rissanen 412a4f32ff net: Fix menuconfig for setting up samples IP addresses
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>
2016-12-02 12:41:15 +02:00
Leandro Pereira 697f4098f2 net: tcp: While disposing connection, properly check net_tcp pointer
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>
2016-12-02 12:41:15 +02:00
Leandro Pereira 572e3a1607 net: tcp: Calculate ack# correctly when receiving data
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>
2016-12-02 12:41:15 +02:00
Leandro Pereira 564d8cda53 net: tcp: Revisit implementation of passive close
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>
2016-12-02 12:41:15 +02:00
Leandro Pereira bab94301ff net: tcp: Print pointer to state when transitioning
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>
2016-12-02 12:41:15 +02:00
Leandro Pereira 4ed6ed06d8 net: tcp: Be more careful before dereferencing pointer in accept()
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>
2016-12-02 12:41:15 +02:00
Leandro Pereira 777cd0727c net: tcp: Fix state transitions during handshake
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>
2016-12-02 12:41:15 +02:00
Leandro Pereira e66a257b7e net: tcp: Print all the reasons a RST segment is sent
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>
2016-12-02 12:41:15 +02:00
Leandro Pereira 95d23577d2 net: tcp: Handshake ACK timeout should transition to LISTEN
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>
2016-12-02 12:41:15 +02:00
Leandro Pereira 483c8e780f net: Remove duplicated return statement
Change-Id: I7dc42165d94add6d24dfcbf427f1fee3f44f6f5b
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
2016-12-02 12:41:15 +02:00
Jukka Rissanen 5165eb7e7e net: udp: Add util to create UDP packet
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>
2016-12-02 12:41:15 +02:00
Jukka Rissanen 9ee1f3f7d4 net: Add support for setting up sample apps IP addresses
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>
2016-12-02 12:41:14 +02:00
Jukka Rissanen 06fd64d1a0 net: dhcpv4: Fix debug output
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>
2016-12-02 12:41:14 +02:00
Jukka Rissanen 59532902ff net: mgmt: Use macro to define the stack
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>
2016-12-02 12:41:14 +02:00
Jukka Rissanen b20279dbfd net: rpl: Increase the RX stack usage
RPL requires 300 bytes more stack in RX path.

Change-Id: I7ebe5ec6470f6766997f8b5eb199fc55b059513a
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-12-02 12:41:14 +02:00
Jukka Rissanen 888e6b997d net: Move stack related Kconfig options to Kconfig.stack
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>
2016-12-02 12:41:14 +02:00
Jukka Rissanen 720be1a3b8 net: shell: Add command to print stack usage info
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>
2016-12-02 12:41:14 +02:00
Jukka Rissanen 8e84e36f14 net: Declare a macro to define stacks used by networking
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>
2016-12-02 12:41:14 +02:00
Luiz Augusto von Dentz 1997b24e88 net: bt: Remove comments about nbuf extra references
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>
2016-12-02 12:41:13 +02:00
Luiz Augusto von Dentz d1588dccee net: bt: Print data length for both recv and send
Change-Id: Ibe5c0a17addaa0f7a839691f8eac6128fe95335f
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-12-02 12:41:13 +02:00
Mahavir Jain fa43abc100 net: shell: Fix warning in case CONFIG_NET_IPv6 is not enabled
Change-Id: Ie10aa043c222871c9f9ec8f6f311949b39f7c904
Signed-off-by: Mahavir Jain <mjain@marvell.com>
2016-12-02 12:41:13 +02:00
Leandro Pereira d45a5330ee net: tcp: Validate state transitions for debugging purposes
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>
2016-12-02 12:41:13 +02:00
Leandro Pereira db3bee8bdd net: tcp: No need to #if defined(TCP) inside TCP callback
The whole function is only built if TCP is also built.

Change-Id: I0ed71273fa8db52b3e4c18d4b7b1766593f15f5a
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
2016-12-02 12:41:13 +02:00
Leandro Pereira 7c0e3f9580 net: tcp: Send a FIN|ACK when transitioning from ESTABLISHED->LAST_ACK
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>
2016-12-02 12:41:13 +02:00
Leandro Pereira 99e4aa5dd4 net: Fix compile warnings when building with UDP disabled
The sanity checker should check for these as well eventually.

Change-Id: Ia22c8d0e000ee315ee2f582caa5a6b0c721e8b5f
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
2016-12-02 12:41:13 +02:00
Andy Ross 65e85f39a3 net: Wire up TCP receive callbacks
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>
2016-12-02 12:41:12 +02:00
Andy Ross 9211918c56 net: Refactor net_context_recv() to separate UDP and sync handling
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>
2016-12-02 12:41:12 +02:00
Leandro Pereira 120468a858 net: udp: Remove protocol check in (private) net_udp_append()
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>
2016-12-02 12:41:12 +02:00
Leandro Pereira c4937e85ed net: tcp: Disallow sending messages to unconnected contexts
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>
2016-12-02 12:41:12 +02:00
Leandro Pereira 6a8dcce179 net: tcp: Allow sending packets using send() and sendto()
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>
2016-12-02 12:41:12 +02:00
Leandro Pereira 287111d236 net: Implement net_context_send() in function of net_context_sendto()
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>
2016-12-02 12:41:12 +02:00
Vinicius Costa Gomes f1822a0252 net: Fix compilation when DEBUG is enabled
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>
2016-12-02 12:41:12 +02:00
Ravi kumar Veeramally 72c71e8310 net: ieee802154: Add offset based reassembly feature
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>
2016-12-02 12:41:11 +02:00
Tomasz Bursztyka 3ac3fb1f1e net: ieee802154: Add debug output to 6lo fragmentation
Change-Id: I429398b31a4ebf55658376bdc294faae5774edbf
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2016-12-02 12:41:11 +02:00
Tomasz Bursztyka aa556f828e net: ieee802154: Fix wrong ifdef statement
Fragments reassembly was never used in l2.

Change-Id: Ia06ccbcd591ff79c43915e81c0b273533c607aa6
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2016-12-02 12:41:11 +02:00
Tomasz Bursztyka 3312663011 net: Raise TX stack size to 1200 bytes by default
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>
2016-12-02 12:41:11 +02:00
Jukka Rissanen 28255628f8 net: rpl: Add RPL option to IPv6 HBHO extension header
See RFC 6553 for details.

Change-Id: I2448f6fa03819e797c4825238ff3e125d2f92bbf
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2016-12-02 12:41:11 +02:00
Jukka Rissanen 314068d924 net: Avoid compiler warning when compiled for Arduino 101 ARC
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>
2016-12-02 12:41:11 +02:00