From 0972af957af79989cad173948d4a9f810a9e7bf2 Mon Sep 17 00:00:00 2001 From: Donald Lee Date: Fri, 9 Jul 2021 01:42:56 +0800 Subject: [PATCH] bgpd: Update bgpd example with get_result Signed-off-by: Donald Lee --- bgpd/bgp_routemap.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/bgpd/bgp_routemap.c b/bgpd/bgp_routemap.c index c2062a5f60..0f4d096641 100644 --- a/bgpd/bgp_routemap.c +++ b/bgpd/bgp_routemap.c @@ -365,23 +365,23 @@ static enum route_map_cmd_result_t route_match_script(void *rule, const struct prefix *prefix, void *object) { const char *scriptname = rule; + const char *routematch_function = "route_match"; struct bgp_path_info *path = (struct bgp_path_info *)object; struct frrscript *fs = frrscript_new(scriptname); - if (!fs) { zlog_err("Issue loading script file; defaulting to no match"); return RMAP_NOMATCH; } - if (frrscript_load(fs, "route_match", NULL)) { + if (frrscript_load(fs, routematch_function, NULL)) { zlog_err( "Issue loading script function; defaulting to no match"); return RMAP_NOMATCH; } - enum frrlua_rm_status lrm_status = LUA_RM_FAILURE, + enum frrlua_rm_status status_failure = LUA_RM_FAILURE, status_nomatch = LUA_RM_NOMATCH, status_match = LUA_RM_MATCH, status_match_and_change = LUA_RM_MATCH_AND_CHANGE; @@ -389,21 +389,24 @@ route_match_script(void *rule, const struct prefix *prefix, void *object) struct attr newattr = *path->attr; int result = frrscript_call( - fs, "route_match", ("RM_FAILURE", (long long *)&lrm_status), + fs, routematch_function, + ("prefix", prefix), ("attributes", &newattr), ("peer", path->peer), + ("RM_FAILURE", (long long *)&status_failure), ("RM_NOMATCH", (long long *)&status_nomatch), ("RM_MATCH", (long long *)&status_match), - ("RM_MATCH_AND_CHANGE", (long long *)&status_match_and_change), - ("action", (long long *)&lrm_status), ("prefix", prefix), - ("attributes", &newattr), ("peer", path->peer)); + ("RM_MATCH_AND_CHANGE", (long long *)&status_match_and_change) + ); if (result) { zlog_err("Issue running script rule; defaulting to no match"); return RMAP_NOMATCH; } + long long* action = frrscript_get_result(fs, routematch_function, "action", lua_tointegerp); + int status = RMAP_NOMATCH; - switch (lrm_status) { + switch (*action) { case LUA_RM_FAILURE: zlog_err( "Executing route-map match script '%s' failed; defaulting to no match", @@ -434,6 +437,8 @@ route_match_script(void *rule, const struct prefix *prefix, void *object) break; } + XFREE(MTYPE_TMP, action); + frrscript_delete(fs); return status; -- 2.39.5