+static void
+str_to_vlan_tci(const char *str, ovs_be16 *vlan_tcip, ovs_be16 *maskp)
+{
+ uint16_t vlan_tci, mask;
+ char *tail;
+
+ errno = 0;
+ vlan_tci = strtol(str, &tail, 0);
+ if (errno || (*tail != '\0' && *tail != '/')) {
+ goto error;
+ }
+
+ if (*tail == '/') {
+ mask = strtol(tail + 1, &tail, 0);
+ if (errno || *tail != '\0') {
+ goto error;
+ }
+ } else {
+ mask = UINT16_MAX;
+ }
+
+ *vlan_tcip = htons(vlan_tci);
+ *maskp = htons(mask);
+ return;
+
+error:
+ ovs_fatal(0, "%s: bad syntax for vlan_tci", str);
+}
+