int (*eswitch_mode_set)(struct devlink *devlink, u16 mode);
        int (*eswitch_inline_mode_get)(struct devlink *devlink, u8 *p_inline_mode);
        int (*eswitch_inline_mode_set)(struct devlink *devlink, u8 inline_mode);
+       int (*eswitch_encap_mode_get)(struct devlink *devlink, u8 *p_encap_mode);
+       int (*eswitch_encap_mode_set)(struct devlink *devlink, u8 encap_mode);
 };
 
 static inline void *devlink_priv(struct devlink *devlink)
 
        DEVLINK_ESWITCH_INLINE_MODE_TRANSPORT,
 };
 
+enum devlink_eswitch_encap_mode {
+       DEVLINK_ESWITCH_ENCAP_MODE_NONE,
+       DEVLINK_ESWITCH_ENCAP_MODE_BASIC,
+};
+
 enum devlink_attr {
        /* don't change the order or add anything between, this is ABI! */
        DEVLINK_ATTR_UNSPEC,
 
        DEVLINK_ATTR_PAD,
 
+       DEVLINK_ATTR_ESWITCH_ENCAP_MODE,        /* u8 */
+
        /* add new attributes above here, update the policy in devlink.c */
 
        __DEVLINK_ATTR_MAX,
 
                                   u32 seq, int flags)
 {
        const struct devlink_ops *ops = devlink->ops;
+       u8 inline_mode, encap_mode;
        void *hdr;
        int err = 0;
        u16 mode;
-       u8 inline_mode;
 
        hdr = genlmsg_put(msg, portid, seq, &devlink_nl_family, flags, cmd);
        if (!hdr)
                        goto nla_put_failure;
        }
 
+       if (ops->eswitch_encap_mode_get) {
+               err = ops->eswitch_encap_mode_get(devlink, &encap_mode);
+               if (err)
+                       goto nla_put_failure;
+               err = nla_put_u8(msg, DEVLINK_ATTR_ESWITCH_ENCAP_MODE, encap_mode);
+               if (err)
+                       goto nla_put_failure;
+       }
+
        genlmsg_end(msg, hdr);
        return 0;
 
 {
        struct devlink *devlink = info->user_ptr[0];
        const struct devlink_ops *ops = devlink->ops;
-       u16 mode;
-       u8 inline_mode;
+       u8 inline_mode, encap_mode;
        int err = 0;
+       u16 mode;
 
        if (!ops)
                return -EOPNOTSUPP;
                if (err)
                        return err;
        }
+
+       if (info->attrs[DEVLINK_ATTR_ESWITCH_ENCAP_MODE]) {
+               if (!ops->eswitch_encap_mode_set)
+                       return -EOPNOTSUPP;
+               encap_mode = nla_get_u8(info->attrs[DEVLINK_ATTR_ESWITCH_ENCAP_MODE]);
+               err = ops->eswitch_encap_mode_set(devlink, encap_mode);
+               if (err)
+                       return err;
+       }
+
        return 0;
 }
 
        [DEVLINK_ATTR_SB_TC_INDEX] = { .type = NLA_U16 },
        [DEVLINK_ATTR_ESWITCH_MODE] = { .type = NLA_U16 },
        [DEVLINK_ATTR_ESWITCH_INLINE_MODE] = { .type = NLA_U8 },
+       [DEVLINK_ATTR_ESWITCH_ENCAP_MODE] = { .type = NLA_U8 },
        [DEVLINK_ATTR_DPIPE_TABLE_NAME] = { .type = NLA_NUL_STRING },
        [DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED] = { .type = NLA_U8 },
 };