PUD: the downlink port is in network byte order
[olsrd.git] / lib / pud / wireformat / include / OlsrdPudWireFormat / wireFormat.h
index 95ce526..f7eba96 100644 (file)
  */
 
 /** The version of the wire format */
-#define PUD_WIRE_FORMAT_VERSION                0
+#define PUD_WIRE_FORMAT_VERSION                1
 
 /*
  * Flags
- * We use the smask of nmeaINFO and the flags below on top of that
  */
 
 /** Flags that the GPS information contains the nodeId */
 #define PUD_FLAGS_ID                           0x80
 
+/** Flags that the GPS information is originating from a gateway */
+#define PUD_FLAGS_GATEWAY                      0x40
+
 /*
  * Time
  */
@@ -225,6 +227,7 @@ typedef struct _PudOlsrPositionUpdate {
        uint8_t version; /**< the version of the sentence */
        uint8_t validityTime; /**< the validity time of the sentence */
        uint8_t smask; /**< mask signaling the contents of the sentence */
+       uint8_t flags; /**< mask signaling extra contents of the sentence */
        GpsInfo gpsInfo; /**< the GPS information (MANDATORY) */
        NodeInfo nodeInfo; /**< placeholder for node information (OPTIONAL) */
 }__attribute__((__packed__)) PudOlsrPositionUpdate;
@@ -246,7 +249,7 @@ typedef enum _UplinkMessageType {
 typedef struct _UplinkClusterLeader {
        uint8_t version; /**< the version of the message */
        uint8_t validityTime; /**< the validity time of the sentence */
-       uint16_t downlinkPort; /**< the UDP port on which downlink messages are expected */
+       uint16_t downlinkPort; /**< the UDP port on which downlink messages are expected (in network byte order) */
        union _leader {
                struct _v4 {
                        struct in_addr originator;
@@ -283,6 +286,12 @@ typedef struct _UplinkMessage {
  * FUNCTIONS
  * ************************************************************************ */
 
+/*
+ * NodeIdType
+ */
+
+bool isValidNodeIdType(unsigned long long nodeIdType);
+
 /*
  * Validity Time
  */
@@ -518,6 +527,32 @@ static inline void setPositionUpdateSmask(
        olsrGpsMessage->smask = smask;
 }
 
+/**
+ Get the flags of the position update message
+
+ @param olsrGpsMessage
+ A pointer to the position update message
+ @return
+ The flags of the position update message
+ */
+static inline uint8_t getPositionUpdateFlags(
+               PudOlsrPositionUpdate * olsrGpsMessage) {
+       return olsrGpsMessage->flags;
+}
+
+/**
+ Set the flags of the position update message
+
+ @param olsrGpsMessage
+ A pointer to the position update message
+ @param flags
+ The flags of the position update message
+ */
+static inline void setPositionUpdateFlags(
+               PudOlsrPositionUpdate * olsrGpsMessage, uint8_t flags) {
+       olsrGpsMessage->flags = flags;
+}
+
 /*
  * GpsInfo
  */
@@ -827,7 +862,7 @@ unsigned long long val, unsigned long long min, unsigned long long max,
  */
 static inline NodeIdType getPositionUpdateNodeIdType(int ipVersion,
                PudOlsrPositionUpdate * olsrGpsMessage) {
-       if (getPositionUpdateSmask(olsrGpsMessage) & PUD_FLAGS_ID) {
+       if (getPositionUpdateFlags(olsrGpsMessage) & PUD_FLAGS_ID) {
                return olsrGpsMessage->nodeInfo.nodeIdType;
        }
 
@@ -911,7 +946,7 @@ static inline void setClusterLeaderVersion(
  @param clusterLeaderMessage
  A pointer to the cluster leader message
  @return
- The downlink port of the cluster leader message
+ The downlink port of the cluster leader message (in network byte order)
  */
 static inline uint16_t getClusterLeaderDownlinkPort(
                UplinkClusterLeader * clusterLeaderMessage) {
@@ -924,7 +959,7 @@ static inline uint16_t getClusterLeaderDownlinkPort(
  @param clusterLeaderMessage
  A pointer to the cluster leader message
  @param port
- The downlink port of the cluster leader message
+ The downlink port of the cluster leader message (in network byte order)
  */
 static inline void setClusterLeaderDownlinkPort(
                UplinkClusterLeader * clusterLeaderMessage, uint16_t port) {