net sched actions: implement get_fill_size routine in act_gact
authorRoman Mashak <mrv@mojatatu.com>
Thu, 8 Mar 2018 21:59:20 +0000 (16:59 -0500)
committerDavid S. Miller <davem@davemloft.net>
Fri, 9 Mar 2018 16:25:12 +0000 (11:25 -0500)
Signed-off-by: Roman Mashak <mrv@mojatatu.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/act_gact.c

index 74563254e6763e66d8ce4d6fb62a40a53ab96e07..88fbb8403565f70c42d7fc511f6fd77db766f32b 100644 (file)
@@ -217,6 +217,19 @@ static int tcf_gact_search(struct net *net, struct tc_action **a, u32 index,
        return tcf_idr_search(tn, a, index);
 }
 
+static size_t tcf_gact_get_fill_size(const struct tc_action *act)
+{
+       size_t sz = nla_total_size(sizeof(struct tc_gact)); /* TCA_GACT_PARMS */
+
+#ifdef CONFIG_GACT_PROB
+       if (to_gact(act)->tcfg_ptype)
+               /* TCA_GACT_PROB */
+               sz += nla_total_size(sizeof(struct tc_gact_p));
+#endif
+
+       return sz;
+}
+
 static struct tc_action_ops act_gact_ops = {
        .kind           =       "gact",
        .type           =       TCA_ACT_GACT,
@@ -227,6 +240,7 @@ static struct tc_action_ops act_gact_ops = {
        .init           =       tcf_gact_init,
        .walk           =       tcf_gact_walker,
        .lookup         =       tcf_gact_search,
+       .get_fill_size  =       tcf_gact_get_fill_size,
        .size           =       sizeof(struct tcf_gact),
 };