Add ip_get_proto()
This commit is contained in:
@@ -43,6 +43,7 @@ static inline size_t str_cpy (char *restrict dst, const char *restrict src, size
|
|||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_pure_
|
||||||
static inline int str_cmp (const char *restrict sa, const char *restrict sb)
|
static inline int str_cmp (const char *restrict sa, const char *restrict sb)
|
||||||
{
|
{
|
||||||
if (!sa || !sb)
|
if (!sa || !sb)
|
||||||
@@ -55,6 +56,7 @@ static inline int str_cmp (const char *restrict sa, const char *restrict sb)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_pure_
|
||||||
static inline size_t str_len (const char *restrict str)
|
static inline size_t str_len (const char *restrict str)
|
||||||
{
|
{
|
||||||
if (!str)
|
if (!str)
|
||||||
@@ -111,16 +113,19 @@ static inline void buffer_format (buffer_t *buffer)
|
|||||||
buffer->read = buffer->data;
|
buffer->read = buffer->data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_pure_
|
||||||
static inline size_t buffer_size (buffer_t *buffer)
|
static inline size_t buffer_size (buffer_t *buffer)
|
||||||
{
|
{
|
||||||
return buffer->end-buffer->data;
|
return buffer->end-buffer->data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_pure_
|
||||||
static inline size_t buffer_write_size (buffer_t *buffer)
|
static inline size_t buffer_write_size (buffer_t *buffer)
|
||||||
{
|
{
|
||||||
return buffer->end-buffer->write;
|
return buffer->end-buffer->write;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_pure_
|
||||||
static inline size_t buffer_read_size (buffer_t *buffer)
|
static inline size_t buffer_read_size (buffer_t *buffer)
|
||||||
{
|
{
|
||||||
return buffer->write-buffer->read;
|
return buffer->write-buffer->read;
|
||||||
|
|||||||
@@ -20,6 +20,8 @@
|
|||||||
#define _printf_(A,B) __attribute__((format(printf,A,B)))
|
#define _printf_(A,B) __attribute__((format(printf,A,B)))
|
||||||
#define _noreturn_ __attribute__((noreturn))
|
#define _noreturn_ __attribute__((noreturn))
|
||||||
#define _unused_ __attribute__((unused))
|
#define _unused_ __attribute__((unused))
|
||||||
|
#define _pure_ __attribute__((pure))
|
||||||
|
#define _const_ __attribute__((const))
|
||||||
#define _align_(...) __attribute__((aligned(__VA_ARGS__)))
|
#define _align_(...) __attribute__((aligned(__VA_ARGS__)))
|
||||||
|
|
||||||
typedef struct buffer buffer_t;
|
typedef struct buffer buffer_t;
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
_pure_
|
||||||
static inline int ip_get_version (const uint8_t *data, size_t size)
|
static inline int ip_get_version (const uint8_t *data, size_t size)
|
||||||
{
|
{
|
||||||
if (size<20) // XXX
|
if (size<20) // XXX
|
||||||
@@ -10,6 +11,7 @@ static inline int ip_get_version (const uint8_t *data, size_t size)
|
|||||||
return data[0]>>4;
|
return data[0]>>4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_pure_
|
||||||
static inline ssize_t ip_get_size (const uint8_t *data, size_t size)
|
static inline ssize_t ip_get_size (const uint8_t *data, size_t size)
|
||||||
{
|
{
|
||||||
switch (ip_get_version(data, size)) {
|
switch (ip_get_version(data, size)) {
|
||||||
@@ -23,3 +25,18 @@ static inline ssize_t ip_get_size (const uint8_t *data, size_t size)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_pure_
|
||||||
|
static inline ssize_t ip_get_proto (const uint8_t *data, size_t size)
|
||||||
|
{
|
||||||
|
switch (ip_get_version(data, size)) {
|
||||||
|
case 4:
|
||||||
|
return data[9];
|
||||||
|
case 6:
|
||||||
|
return data[6];
|
||||||
|
case -1:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user