Commit Graph

7336 Commits (22acfbf077af36081218801cb952376a446eafe2)

Author SHA1 Message Date
Sam Grove 6762ead376 add lwip to all c files that come from the lwip codebase to reduce duplicate file names when exporting. 2016-07-22 02:02:37 -05:00
Russ Butler 3fe5d320ec Fix LPC1768 tests
Don't have GCC_ARM use GCC_CR's memory region in mem.c.  This fixes
some tests.
2016-07-22 02:02:37 -05:00
Sam Grove 89d02fab17 added default placement macro for all boards and toolchains 2016-07-22 02:02:37 -05:00
Sam Grove f4e3ab4058 add IAR placement for LPC1768 and lwip buffers 2016-07-22 02:02:37 -05:00
Christopher Haster 68365a9a59 Increased lwip connect timeout to 5 seconds by default
For very slow networks the previous default has be problematically short
2016-07-22 02:02:37 -05:00
Christopher Haster d82bbb1c40 Fixed incorrect semaphore handling on lwip connect and socket_connect
- Semaphore returns 0 on timeout, and negative was incorrect used for
  errors
- Correctly checked error code on tcp_connect

thanks to @LiyouZhou
fixes #284, fixes #285, fixes #166
2016-07-22 02:02:37 -05:00
Christopher Haster df5c05f38c Added handling for already connected sockets in LWIPInterface::connect 2016-07-22 02:02:37 -05:00
Christopher Haster 9eac5102fd Fixed behaviour of get_ip_address and get_mac_address for LWIPInterface
per the socket API documentation:

  /** Get the local IP address
   *
   *  @return         Null-terminated representation of the local IP address
   *                  or null if not yet connected
   */
  virtual const char *get_ip_address() = 0;

LWIPInterface incorrectly returned "\0" if unconnected
2016-07-22 02:02:37 -05:00
Christopher Haster 53349343e9 Added NSAPI_KEEPIDLE option to the socket API and LWIPInterface 2016-07-22 02:02:37 -05:00
geky 864c73b64a Implement the NSAPI_KEEPINTVL in the LWIPInterface 2016-07-22 02:02:37 -05:00
Christopher Haster b251c59ffe Added support for NSAPI_KEEPALIVE in LWIPInterface 2016-07-22 02:02:37 -05:00
Christopher Haster 05b21d7b2d Fixed uninitialized port in lwip dragged in by KSDK2 2016-07-22 02:02:37 -05:00
Russ Butler 3b32e53c54 Pull in lwip-eth updates from mbedmicro/mbed
Sync the directory lwip-eth with that of mbedmicro/mbed at revision
b32f7a9aaf.
2016-07-22 02:02:37 -05:00
Russ Butler 59f444f0ce Remove hal
Remove all the hal files in preparation for pulling in mbedmicro/mbed.
2016-07-22 02:02:37 -05:00
Devaraj Ranganna c9d0447a3e Incrase netif_up semaphore timeout from 1500ms to 2500ms 2016-07-22 02:02:37 -05:00
Christopher Haster a263b91360 Add rudimentary support for server side
mirrored from:
https://developer.mbed.org/teams/NetworkSocketAPI/code/LWIPInterface/
2016-07-22 02:02:37 -05:00
Christopher Haster 0d0d008411 Match changes to NSAPI in LWIPInterface
mirrored from:
https://developer.mbed.org/teams/NetworkSocketAPI/code/LWIPInterface/
2016-07-22 02:02:37 -05:00
Christopher Haster a7c07996d9 Separate Stack/Interface concept into two distinct classes 2016-07-22 02:02:37 -05:00
Christopher Haster def3b408f0 Rename Interface -> Stack
NetworkInterface  -> NetworkStack
EthernetInterface -> EthernetStack
WiFiInterface     -> WiFiStack
CellularInterface -> CellularStack
MeshInterface     -> MeshStack
2016-07-22 02:02:37 -05:00
Christopher Haster 3850933298 Standardized comment style 2016-07-22 02:02:37 -05:00
Christopher Haster e51f157c33 Revised stack specific configurations
Adds the following functions for direct configuration of interface
- (set|get)stackopt
- (set|get)sockopt
2016-07-22 02:02:37 -05:00
Christopher Haster 1aa0b6ce2a Added better support for SocketAddress/string addresses/ports 2016-07-22 02:02:37 -05:00
Christopher Haster e47bb97eff Renamed NetworkInterface create/destroy methods to match Socket methods
- socket_create -> socket_open
- socket_destroy -> socket_close
2016-07-22 02:02:37 -05:00
Christopher Haster db8495c7ed Move to single state-change interrupt
Pros
- Easier to implement
- More similar to SIGIO in BDS sockets

Cons
- Less information, but this information had a high risk of being
  faulty/spurious
2016-07-22 02:02:37 -05:00
Christopher Haster 41d7277a4b Remove shutdown parameter from close call
Pros
- Simplifies interface
- Easier base implementation

Cons
- May need shutdown functionality, in this case shutdown
  can be added as another function in the future
2016-07-22 02:02:37 -05:00
Christopher Haster a25aeea977 Move to asynch lwip sockets based on armmbed/sal-stack-lwip
Move the backend of LWIPInterface from the LWIP socket API to the
asynch UDP/TCP APIs used in https://github.com/armmbed/sal-stack-lwip.
Provides asynchronous functionality for the LWIPInterface.
2016-07-22 02:02:37 -05:00
Martin Kojtal 498add7f9f lwip - fix size of sys mutex for RTX 4.79
The size was increased to 4 bytes. Thanks @c1728p9 for spotting this.
2016-07-22 02:02:37 -05:00
Christopher Haster 697ac558be Matched changes NetworkSocketAPI
Responded to feedback from mbed-client implementation
to introduce a full feature set that should support most
of the use cases for the API.
2016-07-22 02:02:37 -05:00
Bogdan Marinescu b032d1886f Preparing new layout - moving lwip 2016-07-22 02:02:28 -05:00
Christopher Haster a5ea143c77 Updated config tests to match change in error message 2016-07-22 00:35:13 -05:00
Christopher Haster 9bd7a2fe72 Added proper support for the extra_labels target override
Due to dependencies between the config/target systems, the config
has been modified to preparse the mbed_app.json for overrides.
This means that attributes with dependencies in the targets are
only valid at the application level. A hard error has been
added for these attributes if they are supplied at the library
level.
2016-07-22 00:35:13 -05:00
Christopher Haster f2051b217a Modified config to explicitly update cumulative attributes in targets
Modified '_process_config_and_overrides' to update cumulative
attributes based on cumulative overrides found during walking config
files.

This should remove most of the disparity between the config target
cumulative overrides and cumulative attributes set in targets.json.
These cumulative overrides are updated after the global target
instantiation though, which may cause internal build tool state
dependent on cumulative attributes to not correctly reflect all
cumulative overrides.
2016-07-22 00:35:13 -05:00
Christopher Haster 0fcb20e8c1 Generalized handling of cumulative attributes in target overrides
In tools/config.py, Config now aggregates all cumulative attributes in
target overrides.

{
  "target_overrides": {
    "K64F": {
      "target.features_add": ["UVISOR"],
      "target.extra_labels_add": ["UVISOR_SUPPORTED"],
      "target.macros_add": ["UVISOR_MACRO"],
      "target.device_has_add": ["UVISOR_HAS"]
    }
  }
}

Note: no action is performed on overrides yet
2016-07-22 00:35:13 -05:00
Sam Grove f817ec136c Merge pull request #2142 from theotherjimmy/anti-remove-repo
[tools-build,make,test] Disallow parent of repo as --build args
2016-07-21 22:11:28 -05:00
Sam Grove b10276cbef Merge pull request #2173 from theotherjimmy/abstract-base-class
[toolchains]Abstractify the mbedToolchain base class.
2016-07-21 22:10:49 -05:00
Sam Grove 702707dee7 Merge pull request #2166 from theotherjimmy/prevent-traceback-during-export
Preventing a traceback when a library is not built during export
2016-07-21 22:09:52 -05:00
Sam Grove e6d4b84197 Merge pull request #2213 from pan-/fix#2132
Remove LF clock initialization from os_init_clock.
2016-07-21 22:08:06 -05:00
Christopher Haster 03c5855496 Add 'features/net/network-socket/' from commit 'e09565474188b905cada21166118a82e66359217'
git-subtree-dir: features/net/network-socket
git-subtree-mainline: db60d6a7f7
git-subtree-split: e095654741
2016-07-21 18:30:42 -05:00
Christopher Haster e095654741 Fixed ambiguity/protected access issue in Socket::open
NetworkStack/NetworkInterface overloads
 - Multiple inheritance results in ambiguity

NetworkStack with templated get_stack overload
 - get_stack hidden behind protected access prevents template match
 - explicit call to NetworkInterface::get_stack does not follow vtable

Solution is to use two overloaded function for
NetworkStack/NetworkInterface, and an overload for a templated type that
supports a static_cast to NetworkStack. This resolves the ambiguity
without being blocked by protected access.

Moved duplicated overloads out to overload of common nsapi_create_stack
function.
2016-07-21 18:23:12 -05:00
Christopher Haster 856120994e Standardized documentation of the NetworkInterface class 2016-07-21 18:23:12 -05:00
Christopher Haster 01f38cc940 Added better support for NetworkInterface/NetworkStack
Mostly reduced code duplication for NetworkInterface/NetworkStack
arguments.

Moved to templated Socket constructors/open member functions. This
allows multiple inheritance to be used for classes that provide
both a NetworkInterface and NetworkStack, such as the esp8266.
2016-07-21 18:23:12 -05:00
Christopher Haster 5b63cbbd3e Added primitive nsapi_stack_t and nsapi_stack_api_t structures
Provides a primitive structure for explicitly instantiating
network stack structures/vtables.

- Avoids reoccuring issue with non-gced vtables
- Provides thick api layer for additional nsapi features
- Provides more explicit seperation between implementation and user api

Now implementors have two options:
1. Extend NetworkStack and implement all of the abstract member functions
2. Fill out a nsapi_stack_api_t and provide a NetworkStack with nsapi_create_stack

option 1 provides an easy route for porting single drivers such as the
esp8266 or the c027 and can easily benefit from other C++ classes.

option 2 provides an easy route for porting full network-stacks such as
lwip or nanostack, which provide their own host of networking utilities
and only need a minimal socket interface.
2016-07-21 18:23:12 -05:00
Christopher Haster 7ab9f4c267 Added opaque nsapi_socket_t type
typedef void *nsapi_socket_t

Helps avoid confusion with multiple void*s floating around,
especially when passing a nsapi_socket_t by pointer as a
destination.

The nsapi_socket_t is just an opaque handle, implementations
still need a cast to obtain implementation specific socket pointer.
2016-07-21 18:23:12 -05:00
Christopher Haster d985d70bf8 Added primitive nsapi_addr_t type
Provides primitive type for network address that is more constrained
than "pointer to array of bytes".

- POD type avoids issues with constructors
- Removes complexity from SocketAddress class
- Easily passed through C interfaces
- Easily casted to SocketAddress and vice-versa
2016-07-21 18:23:12 -05:00
Christopher Haster 97380a75c6 Restructured nsapi headers
- Provide nsapi.h as central entry point
- Provide nsapi_types.h as c-compatible destination for nsapi types
- Standardize include paths
2016-07-21 18:22:55 -05:00
Russ Butler 04e4d9f450 Fix async NSAPI race condition
Remove read and write mutexes since multiple calls to send or multiple
calls to recv on different threads is undefined behavior.
This is because the size of data sent or received by these calls is
undefined and could lead to the data being interleaved.  The code now
asserts that there are not multiple threads calling send at the same
or calling recv at the same time.  Note that calling send and recv from
different threads at the same time is still safe and well defined
behavior.

By removing the read and write mutexes and associated timeout it
guarantees that a stack call will always be made and thus the value
NSAPI_ERROR_TIMEOUT cannot get falsely returned.
2016-07-21 18:20:59 -05:00
Russ Butler 90cd978785 Separate interface from stack in NSAPI
This patch consists of:
-Add NetworkInterface to wrap objects bound to a stack and update
    socket code to handle this in addition to NetworkStacks
-Update MeshInterface to inherit from NetworkInterface
-Update NanostackInterface so it only inherits from NetworkStack
-Add MeshInterfaceNanostack and update LoWPANNDInterface and
    ThreadInterface to inherit from this
2016-07-21 18:20:45 -05:00
geky 3ee8e30ae4 Added NSAPI_KEEPINTVL/NSAPI_KEEPIDLE options to the socket API 2016-07-21 18:19:21 -05:00
Christopher Haster a6edc268f3 Coalesce redundant events to reduce cpu usage in lazy implementations
*cough* esp8266 *cough*

this is especially important for event-loop based systems where
excessive events results in problematic memory consumption.
2016-07-21 18:19:21 -05:00
Russ Butler c3baf2792e Fix SocketAddress constructor to support ipv6
Fix typo causing ipv6 addresses in the constructor to fail.
2016-07-21 18:19:21 -05:00