Browse Source

lease6: handle both ia_na and ia_pd parameters

This is undocumented in Kea, but lease6_renew and lease6_rebind can get
either a "ia_na" and "ia_pd" parameter.  Handle both to avoid an exception
being raised when "ia_na" is not present.
Baptiste Jonglez 7 years ago
parent
commit
6ff0aa698b
1 changed files with 18 additions and 4 deletions
  1. 18 4
      src/callouts.cc

+ 18 - 4
src/callouts.cc

@@ -295,12 +295,19 @@ int lease6_renew(CalloutHandle& handle) {
     Pkt6Ptr query;
     Pkt6Ptr query;
     Lease6Ptr lease;
     Lease6Ptr lease;
     boost::shared_ptr<Option6IA> ia_na;
     boost::shared_ptr<Option6IA> ia_na;
+    boost::shared_ptr<Option6IA> ia_pd;
     handle.getArgument("query6", query);
     handle.getArgument("query6", query);
     extract_query6(env, query);
     extract_query6(env, query);
     handle.getArgument("lease6", lease);
     handle.getArgument("lease6", lease);
     extract_lease6(env, lease);
     extract_lease6(env, lease);
-    handle.getArgument("ia_na", ia_na);
-    /* TODO */
+    try {
+        handle.getArgument("ia_na", ia_na);
+        /* TODO: use ia_na */
+    } catch (const NoSuchArgument&) { }
+    try {
+        handle.getArgument("ia_pd", ia_pd);
+        /* TODO: use ia_pd */
+    } catch (const NoSuchArgument&) { }
     /* Run script */
     /* Run script */
     int ret;
     int ret;
     ret = run_script("lease6_renew", env);
     ret = run_script("lease6_renew", env);
@@ -312,12 +319,19 @@ int lease6_rebind(CalloutHandle& handle) {
     Pkt6Ptr query;
     Pkt6Ptr query;
     Lease6Ptr lease;
     Lease6Ptr lease;
     boost::shared_ptr<Option6IA> ia_na;
     boost::shared_ptr<Option6IA> ia_na;
+    boost::shared_ptr<Option6IA> ia_pd;
     handle.getArgument("query6", query);
     handle.getArgument("query6", query);
     extract_query6(env, query);
     extract_query6(env, query);
     handle.getArgument("lease6", lease);
     handle.getArgument("lease6", lease);
     extract_lease6(env, lease);
     extract_lease6(env, lease);
-    handle.getArgument("ia_na", ia_na);
-    /* TODO */
+    try {
+        handle.getArgument("ia_na", ia_na);
+        /* TODO: use ia_na */
+    } catch (const NoSuchArgument&) { }
+    try {
+        handle.getArgument("ia_pd", ia_pd);
+        /* TODO: use ia_pd */
+    } catch (const NoSuchArgument&) { }
     /* Run script */
     /* Run script */
     int ret;
     int ret;
     ret = run_script("lease6_rebind", env);
     ret = run_script("lease6_rebind", env);