Browse Source

util: Add compact MAC address formatting/parsing

The P2P DBus interface will use addresses for
DBus paths, and uses them without any separators.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Johannes Berg 14 years ago
parent
commit
0c11c63375
2 changed files with 31 additions and 0 deletions
  1. 24 0
      src/utils/common.c
  2. 7 0
      src/utils/common.h

+ 24 - 0
src/utils/common.c

@@ -69,6 +69,30 @@ int hwaddr_aton(const char *txt, u8 *addr)
 	return 0;
 	return 0;
 }
 }
 
 
+/**
+ * hwaddr_compact_aton - Convert ASCII string to MAC address (no colon delimitors format)
+ * @txt: MAC address as a string (e.g., "001122334455")
+ * @addr: Buffer for the MAC address (ETH_ALEN = 6 bytes)
+ * Returns: 0 on success, -1 on failure (e.g., string not a MAC address)
+ */
+int hwaddr_compact_aton(const char *txt, u8 *addr)
+{
+	int i;
+
+	for (i = 0; i < 6; i++) {
+		int a, b;
+
+		a = hex2num(*txt++);
+		if (a < 0)
+			return -1;
+		b = hex2num(*txt++);
+		if (b < 0)
+			return -1;
+		*addr++ = (a << 4) | b;
+	}
+
+	return 0;
+}
 
 
 /**
 /**
  * hwaddr_aton2 - Convert ASCII string to MAC address (in any known format)
  * hwaddr_aton2 - Convert ASCII string to MAC address (in any known format)

+ 7 - 0
src/utils/common.h

@@ -402,6 +402,12 @@ void perror(const char *s);
 #ifndef MAC2STR
 #ifndef MAC2STR
 #define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
 #define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
 #define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x"
 #define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x"
+
+/*
+ * Compact form for string representation of MAC address
+ * To be used, e.g., for constructing dbus paths for P2P Devices
+ */
+#define COMPACT_MACSTR "%02x%02x%02x%02x%02x%02x"
 #endif
 #endif
 
 
 #ifndef BIT
 #ifndef BIT
@@ -436,6 +442,7 @@ typedef u64 __bitwise le64;
 #endif /* __must_check */
 #endif /* __must_check */
 
 
 int hwaddr_aton(const char *txt, u8 *addr);
 int hwaddr_aton(const char *txt, u8 *addr);
+int hwaddr_compact_aton(const char *txt, u8 *addr);
 int hwaddr_aton2(const char *txt, u8 *addr);
 int hwaddr_aton2(const char *txt, u8 *addr);
 int hex2byte(const char *hex);
 int hex2byte(const char *hex);
 int hexstr2bin(const char *hex, u8 *buf, size_t len);
 int hexstr2bin(const char *hex, u8 *buf, size_t len);