1 #include "incs.h" 2 3 /* 4 * integer (uint16_t, uint32_t, uint64_t) attributes 5 */ 6 7 void test21(void) 8 { 9 RADIUS_PACKET *packet; 10 uint16_t v16; 11 uint32_t v32; 12 uint64_t v64; 13 14 static const uint8_t attrs_beforeset[] = { 15 1, 3, 0, 16 10, 4, 0x12, 0x34, 17 RADIUS_TYPE_VENDOR_SPECIFIC, 10, 0, 0, 0, 20, 30, 4, 0x43, 0x21, 18 40, 6, 0x13, 0x57, 0x9b, 0xdf, 19 RADIUS_TYPE_VENDOR_SPECIFIC, 12, 0, 0, 0, 50, 60, 6, 0x24, 0x68, 0xac, 0xe0, 20 70, 10, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 21 RADIUS_TYPE_VENDOR_SPECIFIC, 16, 0, 0, 0, 80, 90, 10, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 22 }; 23 static const uint8_t attrs_afterset[] = { 24 1, 3, 0, 25 10, 4, 0x43, 0x21, 26 RADIUS_TYPE_VENDOR_SPECIFIC, 10, 0, 0, 0, 20, 30, 4, 0x12, 0x34, 27 40, 6, 0x24, 0x68, 0xac, 0xe0, 28 RADIUS_TYPE_VENDOR_SPECIFIC, 12, 0, 0, 0, 50, 60, 6, 0x13, 0x57, 0x9b, 0xdf, 29 70, 10, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 30 RADIUS_TYPE_VENDOR_SPECIFIC, 16, 0, 0, 0, 80, 90, 10, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 31 }; 32 33 packet = radius_new_request_packet(RADIUS_CODE_ACCESS_REQUEST); 34 35 radius_put_raw_attr(packet, 1, "", 1); /* padding for UNalignment */ 36 radius_put_uint16_attr(packet, 10, 0x1234); 37 radius_put_vs_uint16_attr(packet, 20, 30, 0x4321); 38 radius_put_uint32_attr(packet, 40, 0x13579bdfU); 39 radius_put_vs_uint32_attr(packet, 50, 60, 0x2468ace0U); 40 radius_put_uint64_attr(packet, 70, 0x0123456789abcdefULL); 41 radius_put_vs_uint64_attr(packet, 80, 90, 0xfedcba9876543210ULL); 42 43 CHECK(radius_get_length(packet) == sizeof(attrs_beforeset) + 20); 44 CHECK(memcmp(radius_get_data(packet) + 20, attrs_beforeset, sizeof(attrs_beforeset)) == 0); 45 46 CHECK(radius_get_uint16_attr(packet, 10, &v16) == 0); 47 CHECK(v16 == 0x1234); 48 CHECK(radius_get_vs_uint16_attr(packet, 20, 30, &v16) == 0); 49 CHECK(v16 == 0x4321); 50 51 CHECK(radius_get_uint32_attr(packet, 40, &v32) == 0); 52 CHECK(v32 == 0x13579bdfU); 53 CHECK(radius_get_vs_uint32_attr(packet, 50, 60, &v32) == 0); 54 CHECK(v32 == 0x2468ace0U); 55 56 CHECK(radius_get_uint64_attr(packet, 70, &v64) == 0); 57 CHECK(v64 == 0x0123456789abcdefULL); 58 CHECK(radius_get_vs_uint64_attr(packet, 80, 90, &v64) == 0); 59 CHECK(v64 == 0xfedcba9876543210ULL); 60 61 CHECK(radius_set_uint16_attr(packet, 10, 0x4321) == 0); 62 CHECK(radius_set_vs_uint16_attr(packet, 20, 30, 0x1234) == 0); 63 CHECK(radius_set_uint32_attr(packet, 40, 0x2468ace0U) == 0); 64 CHECK(radius_set_vs_uint32_attr(packet, 50, 60, 0x13579bdfU) == 0); 65 CHECK(radius_set_uint64_attr(packet, 70, 0xfedcba9876543210ULL) == 0); 66 CHECK(radius_set_vs_uint64_attr(packet, 80, 90, 0x0123456789abcdefULL) == 0); 67 68 CHECK(radius_get_length(packet) == sizeof(attrs_afterset) + 20); 69 CHECK(memcmp(radius_get_data(packet) + 20, attrs_afterset, sizeof(attrs_afterset)) == 0); 70 71 CHECK(radius_get_uint16_attr(packet, 40, &v16) != 0); 72 CHECK(radius_get_vs_uint16_attr(packet, 50, 60, &v16) != 0); 73 CHECK(radius_get_uint32_attr(packet, 70, &v32) != 0); 74 CHECK(radius_get_vs_uint32_attr(packet, 80, 90, &v32) != 0); 75 CHECK(radius_get_uint64_attr(packet, 10, &v64) != 0); 76 CHECK(radius_get_vs_uint64_attr(packet, 20, 30, &v64) != 0); 77 } 78 79 ADD_TEST(test21) 80