Add ip_get_proto()

This commit is contained in:
angt
2015-12-10 13:17:27 +01:00
parent e08eb73f98
commit f36fde5054
3 changed files with 24 additions and 0 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
}