Free (GPLv2) TCP/IP stack developed by TASS Belgium

Dependents:   lpc1768-picotcp-demo ZeroMQ_PicoTCP_Publisher_demo TCPSocket_HelloWorld_PicoTCP Pico_TCP_UDP_Test ... more

PicoTCP. Copyright (c) 2013 TASS Belgium NV.

Released under the GNU General Public License, version 2.

Different licensing models may exist, at the sole discretion of the Copyright holders.

Official homepage: http://www.picotcp.com

Bug tracker: https://github.com/tass-belgium/picotcp/issues

Development steps:

  • initial integration with mbed RTOS
  • generic mbed Ethernet driver
  • high performance NXP LPC1768 specific Ethernet driver
  • Multi-threading support for mbed RTOS
  • Berkeley sockets and integration with the New Socket API
  • Fork of the apps running on top of the New Socket API
  • Scheduling optimizations
  • Debugging/benchmarking/testing

Demo application (measuring TCP sender performance):

Import programlpc1768-picotcp-demo

A PicoTCP demo app testing the ethernet throughput on the lpc1768 mbed board.

Revision:
154:6c0e92a80c4a
Parent:
152:a3d286bf94e5
--- a/stack/pico_socket_multicast.c	Mon Sep 28 14:02:27 2015 +0200
+++ b/stack/pico_socket_multicast.c	Mon Sep 28 14:14:17 2015 +0200
@@ -37,8 +37,8 @@
 struct pico_mcast 
 {
     struct pico_socket *s;
-    struct pico_mreq *mreq;
-    struct pico_mreq_source *mreq_s;
+    struct pico_ip_mreq *mreq;
+    struct pico_ip_mreq_source *mreq_s;
     union pico_address *address;
     union pico_link *mcast_link;
     struct pico_mcast_listen *listen;
@@ -555,7 +555,7 @@
 }
 #endif
 
-static int pico_socket_setoption_pre_validation(struct pico_mreq *mreq)
+static int pico_socket_setoption_pre_validation(struct pico_ip_mreq *mreq)
     {
     if (!mreq) 
         return -1;
@@ -566,7 +566,7 @@
     return 0;
 }
 #ifdef PICO_SUPPORT_IPV6
-static int pico_socket_setoption_pre_validation_ipv6(struct pico_mreq *mreq)
+static int pico_socket_setoption_pre_validation_ipv6(struct pico_ip_mreq *mreq)
 {
     if (!mreq)
         return -1;
@@ -578,7 +578,7 @@
 }
 #endif
 
-static struct pico_ipv4_link *pico_socket_setoption_validate_mreq(struct pico_mreq *mreq)
+static struct pico_ipv4_link *pico_socket_setoption_validate_mreq(struct pico_ip_mreq *mreq)
 {
     if (pico_socket_setoption_pre_validation(mreq) < 0)  
         return NULL;
@@ -590,7 +590,7 @@
 }
 
 #ifdef PICO_SUPPORT_IPV6
-static struct pico_ipv6_link *pico_socket_setoption_validate_mreq_ipv6(struct pico_mreq *mreq)
+static struct pico_ipv6_link *pico_socket_setoption_validate_mreq_ipv6(struct pico_ip_mreq *mreq)
 {
     if (pico_socket_setoption_pre_validation_ipv6(mreq) < 0)
         return NULL;
@@ -601,7 +601,7 @@
 }
 #endif
 
-static int pico_socket_setoption_pre_validation_s(struct pico_mreq_source *mreq)
+static int pico_socket_setoption_pre_validation_s(struct pico_ip_mreq_source *mreq)
 {
     if (!mreq)
         return -1;
@@ -612,7 +612,7 @@
     return 0;
 }
 #ifdef PICO_SUPPORT_IPV6
-static int pico_socket_setoption_pre_validation_s_ipv6(struct pico_mreq_source *mreq)
+static int pico_socket_setoption_pre_validation_s_ipv6(struct pico_ip_mreq_source *mreq)
 {
     if (!mreq)
         return -1;
@@ -624,7 +624,7 @@
 }
 #endif
 
-static struct pico_ipv4_link *pico_socket_setoption_validate_s_mreq(struct pico_mreq_source *mreq)
+static struct pico_ipv4_link *pico_socket_setoption_validate_s_mreq(struct pico_ip_mreq_source *mreq)
 {
     if (pico_socket_setoption_pre_validation_s(mreq) < 0)
         return NULL;
@@ -638,7 +638,7 @@
     return get_mcast_link((union pico_address *)&mreq->mcast_link_addr);
 }
 #ifdef PICO_SUPPORT_IPV6
-static struct pico_ipv6_link *pico_socket_setoption_validate_s_mreq_ipv6(struct pico_mreq_source *mreq)
+static struct pico_ipv6_link *pico_socket_setoption_validate_s_mreq_ipv6(struct pico_ip_mreq_source *mreq)
 {
     if (pico_socket_setoption_pre_validation_s_ipv6(mreq) < 0) {
         return NULL;
@@ -657,18 +657,18 @@
 static struct pico_ipv4_link *setop_multicast_link_search(void *value, int bysource)
 {
 
-    struct pico_mreq *mreq = NULL;
+    struct pico_ip_mreq *mreq = NULL;
     struct pico_ipv4_link *mcast_link = NULL;
-    struct pico_mreq_source *mreq_src = NULL;
+    struct pico_ip_mreq_source *mreq_src = NULL;
     if (!bysource) {
-        mreq = (struct pico_mreq *)value;
+        mreq = (struct pico_ip_mreq *)value;
         mcast_link = pico_socket_setoption_validate_mreq(mreq);
         if (!mcast_link) 
            return NULL;
         if (!mreq->mcast_link_addr.ip4.addr)
             mreq->mcast_link_addr.ip4.addr = mcast_link->address.addr;
     } else {
-        mreq_src = (struct pico_mreq_source *)value;
+        mreq_src = (struct pico_ip_mreq_source *)value;
         if (!mreq_src) {
              return NULL;
         }
@@ -687,11 +687,11 @@
 #ifdef PICO_SUPPORT_IPV6
 static struct pico_ipv6_link *setop_multicast_link_search_ipv6(void *value, int bysource)
 {
-    struct pico_mreq *mreq = NULL;
+    struct pico_ip_mreq *mreq = NULL;
     struct pico_ipv6_link *mcast_link = NULL;
-    struct pico_mreq_source *mreq_src = NULL;
+    struct pico_ip_mreq_source *mreq_src = NULL;
     if (!bysource) {
-        mreq = (struct pico_mreq *)value;
+        mreq = (struct pico_ip_mreq *)value;
         mcast_link = pico_socket_setoption_validate_mreq_ipv6(mreq);
         if (!mcast_link) {
            return NULL;
@@ -699,7 +699,7 @@
         if (pico_ipv6_is_null_address(&mreq->mcast_link_addr.ip6))
             mreq->mcast_link_addr.ip6 = mcast_link->address;
     } else {
-        mreq_src = (struct pico_mreq_source *)value;
+        mreq_src = (struct pico_ip_mreq_source *)value;
         if (!mreq_src) {
             return NULL;
         }
@@ -867,9 +867,9 @@
 }
 static int mcast_get_param(struct pico_mcast *mcast, struct pico_socket *s, void *value,int alloc, int by_source) {
     if(by_source)
-        mcast->mreq_s = (struct pico_mreq_source *)value;
+        mcast->mreq_s = (struct pico_ip_mreq_source *)value;
     else    
-        mcast->mreq = (struct pico_mreq *)value;
+        mcast->mreq = (struct pico_ip_mreq *)value;
     mcast->mcast_link = setopt_multicast_check(s, value, alloc, by_source);
     if (!mcast->mcast_link)
         return -1;
@@ -1288,18 +1288,25 @@
 #else
 int pico_udp_set_mc_ttl(struct pico_socket *s, void  *_ttl)
 {
+    IGNORE_PARAMETER(s);
+    IGNORE_PARAMETER(_ttl);
     pico_err = PICO_ERR_EPROTONOSUPPORT;
     return -1;
 }
 
 int pico_udp_get_mc_ttl(struct pico_socket *s, uint8_t *ttl)
 {
+    IGNORE_PARAMETER(s);
+    IGNORE_PARAMETER(ttl);
     pico_err = PICO_ERR_EPROTONOSUPPORT;
     return -1;
 }
 
 int pico_socket_mcast_filter(struct pico_socket *s, union pico_address *mcast_group, union pico_address *src)
 {
+    IGNORE_PARAMETER(s);
+    IGNORE_PARAMETER(mcast_group);
+    IGNORE_PARAMETER(src);
     pico_err = PICO_ERR_EPROTONOSUPPORT;
     return -1;
 }