summaryrefslogtreecommitdiff
path: root/src/openvpn/packet_id.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/openvpn/packet_id.h')
-rw-r--r--src/openvpn/packet_id.h36
1 files changed, 23 insertions, 13 deletions
diff --git a/src/openvpn/packet_id.h b/src/openvpn/packet_id.h
index aceacf8..ecc25a6 100644
--- a/src/openvpn/packet_id.h
+++ b/src/openvpn/packet_id.h
@@ -50,7 +50,6 @@
* to for network transmission.
*/
typedef uint32_t packet_id_type;
-#define PACKET_ID_MAX UINT32_MAX
typedef uint32_t net_time_t;
/*
@@ -255,18 +254,7 @@ const char *packet_id_persist_print(const struct packet_id_persist *p, struct gc
bool packet_id_read(struct packet_id_net *pin, struct buffer *buf, bool long_form);
-/**
- * Write a packet ID to buf, and update the packet ID state.
- *
- * @param p Packet ID state.
- * @param buf Buffer to write the packet ID too
- * @param long_form If true, also update and write time_t to buf
- * @param prepend If true, prepend to buffer, otherwise apppend.
- *
- * @return true if successful, false otherwise.
- */
-bool packet_id_write(struct packet_id_send *p, struct buffer *buf,
- bool long_form, bool prepend);
+bool packet_id_write(const struct packet_id_net *pin, struct buffer *buf, bool long_form, bool prepend);
/*
* Inline functions.
@@ -316,6 +304,28 @@ packet_id_close_to_wrapping(const struct packet_id_send *p)
return p->id >= PACKET_ID_WRAP_TRIGGER;
}
+/*
+ * Allocate an outgoing packet id.
+ * Sequence number ranges from 1 to 2^32-1.
+ * In long_form, a time_t is added as well.
+ */
+static inline void
+packet_id_alloc_outgoing(struct packet_id_send *p, struct packet_id_net *pin, bool long_form)
+{
+ if (!p->time)
+ {
+ p->time = now;
+ }
+ pin->id = ++p->id;
+ if (!pin->id)
+ {
+ ASSERT(long_form);
+ p->time = now;
+ pin->id = p->id = 1;
+ }
+ pin->time = p->time;
+}
+
static inline bool
check_timestamp_delta(time_t remote, unsigned int max_delta)
{