mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-12 09:17:44 +03:00
dhcp: Add test function for computing checksum
This commit is contained in:
parent
d8b61a1dc9
commit
39b7f59600
@ -22,6 +22,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "dhcp-protocol.h"
|
#include "dhcp-protocol.h"
|
||||||
#include "sd-dhcp-client.h"
|
#include "sd-dhcp-client.h"
|
||||||
@ -73,9 +74,48 @@ static void test_request_basic(void)
|
|||||||
assert(sd_dhcp_client_set_request_option(client, 44) == 0);
|
assert(sd_dhcp_client_set_request_option(client, 44) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uint16_t client_checksum(void *buf, int len)
|
||||||
|
{
|
||||||
|
uint32_t sum;
|
||||||
|
uint16_t *check;
|
||||||
|
int i;
|
||||||
|
uint8_t *odd;
|
||||||
|
|
||||||
|
sum = 0;
|
||||||
|
check = buf;
|
||||||
|
|
||||||
|
for (i = 0; i < len / 2 ; i++)
|
||||||
|
sum += check[i];
|
||||||
|
|
||||||
|
if (len & 0x01) {
|
||||||
|
odd = buf;
|
||||||
|
sum += odd[len];
|
||||||
|
}
|
||||||
|
|
||||||
|
return ~((sum & 0xffff) + (sum >> 16));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_checksum(void)
|
||||||
|
{
|
||||||
|
uint8_t buf[20] = {
|
||||||
|
0x45, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x40, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0xff, 0xff, 0xff, 0xff
|
||||||
|
};
|
||||||
|
|
||||||
|
uint8_t check[2] = {
|
||||||
|
0x78, 0xae
|
||||||
|
};
|
||||||
|
|
||||||
|
uint16_t *val = (uint16_t *)check;
|
||||||
|
|
||||||
|
assert(client_checksum(&buf, 20) == *val);
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
test_request_basic();
|
test_request_basic();
|
||||||
|
test_checksum();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user