aboutsummaryrefslogtreecommitdiff
path: root/lib/net_utils.c
diff options
context:
space:
mode:
authorthead_admin <occ_thead@service.alibaba.com>2022-09-13 11:04:33 +0800
committerthead_admin <occ_thead@service.alibaba.com>2022-09-13 11:04:33 +0800
commit43db9e00d5837c100c0b2fbbee64a08ab807d1e0 (patch)
treeb40c0eed02935b6682e8c5c975e3016b6b2f55fe /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.c58
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;
+ }
+}