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:
125:96003ae6f1d8
Parent:
5:445d2fc04784
Child:
127:476fed453d4d
--- a/EthernetInterface/EthernetInterface.h	Wed Nov 27 10:20:00 2013 +0000
+++ b/EthernetInterface/EthernetInterface.h	Thu Nov 28 13:53:18 2013 +0000
@@ -43,6 +43,14 @@
 #ifdef __cplusplus    
 }
 #endif
+
+typedef enum
+{
+    INPUT_FILTER,
+    OUTPUT_FILTER
+}filter_type;
+
+#define PORT_ANY    (0)
  /** Interface using Ethernet to connect to an IP-based network
  *
  */
@@ -98,6 +106,38 @@
    */
   static int setDnsServer(const char *);
   
+  /**
+  * Creates a custom rule for dropping packets.
+  * If an incoming packet is destined for our stack and an input filter that matches
+  * input_src & filter_mask == filter_src & filter_mask and the ports are the same, port = 0 means any port and also filters icmp.
+  * the packet will be dropped.
+  * The same thing for an output filter.
+  * If we try to send a packet and 
+  * output_dst & filter_mask == filter_dst & filter_mask and the ports are the same, 
+  * the packet will be dropped.
+  * return > 0 if success, the number is the filter identifier and it will be used later to destroy the filter.
+  * return < 0 error.
+  */
+  static int createIpFilter(char *ipAddress, char * netmask, int port, filter_type filter);
+  
+  /*
+  * This will create a custom filter, more complex than the previous one.
+  * A packet will be dropped if 
+  * packet.port(s) == filter.port(s)
+  * packet.src & filter.src_mask == filter.src & filter.src_mask
+  * packet.dst & filter.dst_mask == filter.dst & filter.dst_mask
+  * if a value is passed null or 0.0.0.0 for address or 0 for port, will be considered as 
+  * accept any.
+  * return > 0 if success, the number is the filter identifier and it will be used later to destroy the filter.
+  * return < 0 error.
+  */
+  
+  static int createIpFilter(char *src, char * src_netmask, int src_port, char *dst, char * dst_netmask, int dst_port);
+  /*
+  * Destroy a custom filter.
+  */
+  static int destroyIpFilter(int filter_id);
+  
 };
 
 #include "TCPSocketConnection.h"