diff options
author | thead_admin <occ_thead@service.alibaba.com> | 2022-09-13 11:04:33 +0800 |
---|---|---|
committer | thead_admin <occ_thead@service.alibaba.com> | 2022-09-13 11:04:33 +0800 |
commit | 43db9e00d5837c100c0b2fbbee64a08ab807d1e0 (patch) | |
tree | b40c0eed02935b6682e8c5c975e3016b6b2f55fe /lib/net_utils.c |
Linux_SDK_V0.9.5Linux_SDK_V0.9.5
Diffstat (limited to 'lib/net_utils.c')
-rw-r--r-- | lib/net_utils.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/lib/net_utils.c b/lib/net_utils.c new file mode 100644 index 00000000..ed5044c3 --- /dev/null +++ b/lib/net_utils.c @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Generic network code. Moved from net.c + * + * Copyright 1994 - 2000 Neil Russell. + * Copyright 2000 Roland Borde + * Copyright 2000 Paolo Scaffardi + * Copyright 2000-2002 Wolfgang Denk, wd@denx.de + * Copyright 2009 Dirk Behme, dirk.behme@googlemail.com + */ + +#include <common.h> + +struct in_addr string_to_ip(const char *s) +{ + struct in_addr addr; + char *e; + int i; + + addr.s_addr = 0; + if (s == NULL) + return addr; + + for (addr.s_addr = 0, i = 0; i < 4; ++i) { + ulong val = s ? simple_strtoul(s, &e, 10) : 0; + if (val > 255) { + addr.s_addr = 0; + return addr; + } + if (i != 3 && *e != '.') { + addr.s_addr = 0; + return addr; + } + addr.s_addr <<= 8; + addr.s_addr |= (val & 0xFF); + if (s) { + s = (*e) ? e+1 : e; + } + } + + addr.s_addr = htonl(addr.s_addr); + return addr; +} + +void string_to_enetaddr(const char *addr, uint8_t *enetaddr) +{ + char *end; + int i; + + if (!enetaddr) + return; + + for (i = 0; i < 6; ++i) { + enetaddr[i] = addr ? simple_strtoul(addr, &end, 16) : 0; + if (addr) + addr = (*end) ? end + 1 : end; + } +} |