43 lines
720 B
C
43 lines
720 B
C
#pragma once
|
|
|
|
#include <stdint.h>
|
|
|
|
_pure_
|
|
static inline int ip_get_version (const uint8_t *data, size_t size)
|
|
{
|
|
if (size<20) // XXX
|
|
return -1; // XXX
|
|
|
|
return data[0]>>4;
|
|
}
|
|
|
|
_pure_
|
|
static inline ssize_t ip_get_size (const uint8_t *data, size_t size)
|
|
{
|
|
switch (ip_get_version(data, size)) {
|
|
case 4:
|
|
return ((data[2]<<8)|data[3]);
|
|
case 6:
|
|
return ((data[4]<<8)|data[5])+40;
|
|
case -1:
|
|
return -1;
|
|
}
|
|
|
|
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;
|
|
}
|