Changeset 3e6bca8 in mainline for uspace/lib/inet/src
- Timestamp:
- 2021-08-08T17:30:29Z (4 years ago)
- Branches:
- master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- a7f7b9c3
- Parents:
- b4edc96
- Location:
- uspace/lib/inet/src
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/inet/src/addr.c
rb4edc96 r3e6bca8 55 55 const addr32_t addr32_broadcast_all_hosts = 0xffffffff; 56 56 57 static const eth_addr_t inet_eth_addr_solicited_node = { 58 0x33, 0x33, 0xff, 0, 0, 0 59 }; 57 static eth_addr_t inet_eth_addr_solicited_node = 58 ETH_ADDR_INITIALIZER(0x33, 0x33, 0xff, 0, 0, 0); 60 59 61 60 static const inet_addr_t inet_addr_any_addr = { … … 91 90 void eth_addr_solicited_node(const addr128_t ip, eth_addr_t *mac) 92 91 { 93 memcpy(&mac->b[0], &inet_eth_addr_solicited_node.b[0], 3); 94 memcpy(&mac->b[3], ip + 13, 3); 92 uint8_t b[6]; 93 mac->a = inet_eth_addr_solicited_node.a; 94 95 eth_addr_encode(&inet_eth_addr_solicited_node, b); 96 memcpy(&b[3], ip + 13, 3); 97 eth_addr_decode(b, mac); 95 98 } 96 99 -
uspace/lib/inet/src/eth_addr.c
rb4edc96 r3e6bca8 37 37 #include <inet/eth_addr.h> 38 38 #include <mem.h> 39 #include <stdio.h> 39 40 40 const eth_addr_t eth_addr_broadcast = { 41 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 42 }; 41 const eth_addr_t eth_addr_broadcast = 42 ETH_ADDR_INITIALIZER(0xff, 0xff, 0xff, 0xff, 0xff, 0xff); 43 43 44 44 void eth_addr_encode(eth_addr_t *addr, void *buf) 45 45 { 46 46 uint8_t *bp = (uint8_t *)buf; 47 uint64_t a; 48 int i; 47 49 48 memcpy(bp, &addr->b[0], ETH_ADDR_SIZE); 50 a = addr->a; 51 52 for (i = 0; i < ETH_ADDR_SIZE; i++) 53 bp[i] = (a >> (40 - 8 * i)) & 0xff; 49 54 } 50 55 … … 52 57 { 53 58 const uint8_t *bp = (uint8_t *)buf; 59 uint64_t a; 60 int i; 54 61 55 memcpy(&addr->b[0], bp, ETH_ADDR_SIZE); 62 a = 0; 63 for (i = 0; i < ETH_ADDR_SIZE; i++) 64 a |= (uint64_t)bp[i] << (40 - 8 * i); 65 66 addr->a = a; 56 67 } 57 68 … … 62 73 int eth_addr_compare(const eth_addr_t *a, const eth_addr_t *b) 63 74 { 64 return memcmp(a->b, b->b, ETH_ADDR_SIZE) == 0; 75 if (a->a < b->a) 76 return -1; 77 else if (a->a == b->a) 78 return 0; 79 else 80 return 1; 81 } 82 83 void eth_addr_format(eth_addr_t *addr, eth_addr_str_t *saddr) 84 { 85 int i; 86 87 snprintf(saddr->str, 3, "%02x", 88 (unsigned)((addr->a >> 40) & 0xff)); 89 for (i = 1; i < ETH_ADDR_SIZE; i++) { 90 snprintf(saddr->str + 2 + 3 * (i - 1), 4, ":%02x", 91 (unsigned)((addr->a >> (40 - i * 8)) & 0xff)); 92 } 65 93 } 66 94
Note:
See TracChangeset
for help on using the changeset viewer.