+ cookie.sflow.vlan_tci = htons(tci);
+ cookie.sflow.output = output;
+ odp_put_userspace_action(pid, &cookie, actions);
+ return n;
+ } else if (sscanf(s, "userspace(pid=%lli,slow_path(%n", &pid, &n) > 0
+ && n > 0) {
+ union user_action_cookie cookie;
+
+ cookie.type = USER_ACTION_COOKIE_SLOW_PATH;
+ cookie.slow_path.unused = 0;
+ cookie.slow_path.reason = 0;
+
+ while (s[n] != ')') {
+ uint32_t bit;
+
+ for (bit = 1; bit; bit <<= 1) {
+ const char *reason = slow_path_reason_to_string(bit);
+ size_t len = strlen(reason);
+
+ if (reason
+ && !strncmp(s + n, reason, len)
+ && (s[n + len] == ',' || s[n + len] == ')'))
+ {
+ cookie.slow_path.reason |= bit;
+ n += len + (s[n + len] == ',');
+ break;
+ }
+ }
+
+ if (!bit) {
+ return -EINVAL;
+ }
+ }
+ if (s[n + 1] != ')') {
+ return -EINVAL;
+ }
+ n += 2;
+