@@ -578,6 +578,39 @@ lua_add_dhcp_string(lua_State *L)
578578 return 0 ;
579579}
580580
581+ static int
582+ lua_add_dhcp_domain (lua_State * L )
583+ {
584+ struct lua_ctx * l = & lua_ctx ;
585+ long long optn = luaL_checkinteger (L , 1 );
586+ const char * data = luaL_checkstring (L , 2 );
587+ uint8_t * val ;
588+ size_t len ;
589+
590+ if (optn < 1 || optn > 254 ) {
591+ logerrx ("%s: option out of range: %lld" , lua_name , optn );
592+ return 0 ;
593+ }
594+
595+ if (l -> l_p == NULL || l -> l_e == NULL ) {
596+ logerrx ("%s: cannot add options" , lua_name );
597+ return 0 ;
598+ }
599+
600+ len = encode_rfc1035 (data , NULL );
601+ if (len == 0 )
602+ val = NULL ;
603+ else {
604+ val = malloc (len );
605+ if (val == NULL )
606+ return -1 ;
607+ len = encode_rfc1035 (data , val );
608+ }
609+
610+ DHCP_PUT_BIN (& l -> l_p , l -> l_e , (uint8_t )optn , val , len );
611+ return 0 ;
612+ }
613+
581614static ssize_t
582615lua_run_add_dhcp_options (struct plugin * p , struct svc_ctx * sctx ,
583616 const void * dhcp , size_t dhcplen )
@@ -779,6 +812,7 @@ lua_init(struct plugin *p)
779812 { "add_uint16" , lua_add_dhcp_uint16 },
780813 { "add_uint32" , lua_add_dhcp_uint32 },
781814 { "add_string" , lua_add_dhcp_string },
815+ { "add_domain" , lua_add_dhcp_domain },
782816 { NULL , NULL },
783817 };
784818
0 commit comments