Add extended ack support for the tunnel key action by using NL_SET_ERR_MSG
during validation of user input.

Signed-off-by: Simon Horman <simon.hor...@netronome.com>
Signed-off-by: Pieter Jansen van Vuuren <pieter.jansenvanvuu...@netronome.com>
Reviewed-by: Jakub Kicinski <jakub.kicin...@netronome.com>
---
 net/sched/act_tunnel_key.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/net/sched/act_tunnel_key.c b/net/sched/act_tunnel_key.c
index 7ce95538177b..c0bbdec50022 100644
--- a/net/sched/act_tunnel_key.c
+++ b/net/sched/act_tunnel_key.c
@@ -90,12 +90,14 @@ static int tunnel_key_init(struct net *net, struct nlattr 
*nla,
                return -EINVAL;
 
        err = nla_parse_nested(tb, TCA_TUNNEL_KEY_MAX, nla, tunnel_key_policy,
-                              NULL);
+                              extack);
        if (err < 0)
                return err;
 
-       if (!tb[TCA_TUNNEL_KEY_PARMS])
+       if (!tb[TCA_TUNNEL_KEY_PARMS]) {
+               NL_SET_ERR_MSG(extack, "Missing tunnel key parameter");
                return -EINVAL;
+       }
 
        parm = nla_data(tb[TCA_TUNNEL_KEY_PARMS]);
        exists = tcf_idr_check(tn, parm->index, a, bind);
@@ -107,6 +109,7 @@ static int tunnel_key_init(struct net *net, struct nlattr 
*nla,
                break;
        case TCA_TUNNEL_KEY_ACT_SET:
                if (!tb[TCA_TUNNEL_KEY_ENC_KEY_ID]) {
+                       NL_SET_ERR_MSG(extack, "Missing tunnel key enc id");
                        ret = -EINVAL;
                        goto err_out;
                }
@@ -144,6 +147,7 @@ static int tunnel_key_init(struct net *net, struct nlattr 
*nla,
                                                      0, flags,
                                                      key_id, 0);
                } else {
+                       NL_SET_ERR_MSG(extack, "Missing both ipv4 and ipv6 enc 
src and dst");
                        ret = -EINVAL;
                        goto err_out;
                }
-- 
2.11.0

Reply via email to