+/* Parses 's' as a 16-digit hexadecimal number representing a datapath ID. On
+ * success stores the dpid into '*dpidp' and returns true, on failure stores 0
+ * into '*dpidp' and returns false.
+ *
+ * Rejects an all-zeros dpid as invalid. */
+bool
+dpid_from_string(const char *s, uint64_t *dpidp)
+{
+ *dpidp = (strlen(s) == 16 && strspn(s, "0123456789abcdefABCDEF") == 16
+ ? strtoull(s, NULL, 16)
+ : 0);
+ return *dpidp != 0;
+}
+
+bool
+eth_addr_from_string(const char *s, uint8_t ea[ETH_ADDR_LEN])
+{
+ if (sscanf(s, ETH_ADDR_SCAN_FMT, ETH_ADDR_SCAN_ARGS(ea))
+ == ETH_ADDR_SCAN_COUNT) {
+ return true;
+ } else {
+ memset(ea, 0, ETH_ADDR_LEN);
+ return false;
+ }
+}
+