From 43644930511241f6cdff0f6fb66eb3a5302fdaa2 Mon Sep 17 00:00:00 2001
From: Martine Lenders <mlenders@inf.fu-berlin.de>
Date: Wed, 11 Mar 2015 18:26:07 +0100
Subject: [PATCH] ng_ethernet: intial import

---
 sys/include/net/ng_ethernet.h     | 56 +++++++++++++++++++++++++++++++
 sys/include/net/ng_ethernet/hdr.h | 49 +++++++++++++++++++++++++++
 sys/include/net/ng_ethertype.h    |  9 ++---
 3 files changed, 110 insertions(+), 4 deletions(-)
 create mode 100644 sys/include/net/ng_ethernet.h
 create mode 100644 sys/include/net/ng_ethernet/hdr.h

diff --git a/sys/include/net/ng_ethernet.h b/sys/include/net/ng_ethernet.h
new file mode 100644
index 0000000000..7cef7730bc
--- /dev/null
+++ b/sys/include/net/ng_ethernet.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2015 Martine Lenders <mlenders@inf.fu-berlin.de>
+ *
+ * This file is subject to the terms and conditions of the GNU Lesser General
+ * Public License v2.1. See the file LICENSE in the top level directory for
+ * more details.
+ */
+
+/**
+ * @defgroup    net_ng_ethernet Ethernet
+ * @ingroup     net
+ * @brief       Ethernet implementation
+ * @{
+ *
+ * @file
+ * @brief       Definitions for Ethernet
+ *
+ * @author      Martine Lenders <mlenders@inf.fu-berlin.de>
+ */
+
+
+#ifndef NG_ETHERNET_H_
+#define NG_ETHERNET_H_
+
+#include "net/ng_ethernet/hdr.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define NG_ETHERNET_DATA_LEN    (1500)  /**< maximum number of bytes in payload */
+#define NG_ETHERNET_FCS_LEN     (4)     /**< number of bytes in the FCS
+                                         *  (frame check sequence) */
+
+/**
+ * @brief maximum number of bytes in an ethernet frame (without FCS)
+ */
+#define NG_ETHERNET_FRAME_LEN   (NG_ETHERNET_DATA_LEN + \
+                                 sizeof(ng_ethernet_hdr_t))
+#define NG_ETHERNET_MIN_LEN     (64)    /**< minimum number of bytes in an
+                                         * ethernet frame (with FCF) */
+
+/**
+ * @brief maximum number of bytes in an ethernet frame (with FCF)
+ */
+#define NG_ETHERNET_MAX_LEN     (NG_ETHERNET_FRAME_LEN + \
+                                 NG_ETHERNET_FCS_LEN)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* NG_ETHERNET_H_ */
+/**
+ * @}
+ */
diff --git a/sys/include/net/ng_ethernet/hdr.h b/sys/include/net/ng_ethernet/hdr.h
new file mode 100644
index 0000000000..9b8d36051d
--- /dev/null
+++ b/sys/include/net/ng_ethernet/hdr.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2015 Martine Lenders <mlenders@inf.fu-berlin.de>
+ *
+ * This file is subject to the terms and conditions of the GNU Lesser General
+ * Public License v2.1. See the file LICENSE in the top level directory for
+ * more details.
+ */
+
+/**
+ * @defgroup    net_ng_ethernet_hdr Ethernet header
+ * @ingroup     net_ng_ethernet
+ * @brief       Ethernet header
+ * @{
+ *
+ * @file
+ * @brief       Ethernet header definitions
+ *
+ * @author      Martine Lenders <mlenders@inf.fu-berlin.de>
+ */
+
+
+#ifndef NG_ETHERNET_HDR_H_
+#define NG_ETHERNET_HDR_H_
+
+#include <inttypes.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define NG_ETHERNET_ADDR_LEN    (6)     /**< Length of an Ethernet address */
+
+/**
+ * @brief   Ethernet header
+ */
+typedef struct __attribute__((packed)) {
+    uint8_t dst[NG_ETHERNET_ADDR_LEN];  /**< destination address */
+    uint8_t src[NG_ETHERNET_ADDR_LEN];  /**< source address */
+    uint16_t type;                      /**< ether type (see @ref net_ng_ethertype) */
+} ng_ethernet_hdr_t;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* NG_ETHERNET_HDR_H_ */
+/**
+ * @}
+ */
diff --git a/sys/include/net/ng_ethertype.h b/sys/include/net/ng_ethertype.h
index 7d921df429..e46405e1ea 100644
--- a/sys/include/net/ng_ethertype.h
+++ b/sys/include/net/ng_ethertype.h
@@ -7,7 +7,7 @@
  */
 
 /**
- * @defgroup    net_ng_ethertype
+ * @defgroup    net_ng_ethertype Ether types
  * @ingroup     net
  * @brief       Ether types
  * @see         <a href="http://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml#ieee-802-numbers-1">
@@ -31,9 +31,10 @@ extern "C" {
 #endif
 
 /* expand at will ;-) */
-#define NG_ETHERTYPE_IPV4   (0x0800)    /* Internet protocol version 4 */
-#define NG_ETHERTYPE_ARP    (0x0806)    /* Address resolution protocol */
-#define NG_ETHERTYPE_IPV6   (0x86dd)    /* Internet protocol version 6 */
+#define NG_ETHERTYPE_RESERVED   (0x0000)    /**< Reserved */
+#define NG_ETHERTYPE_IPV4       (0x0800)    /**< Internet protocol version 4 */
+#define NG_ETHERTYPE_ARP        (0x0806)    /**< Address resolution protocol */
+#define NG_ETHERTYPE_IPV6       (0x86dd)    /**< Internet protocol version 6 */
 
 #ifdef __cplusplus
 }
-- 
GitLab