@@ -581,6 +581,9 @@ class RTMSG(ctypes.Structure):
581581
582582TLV_TYPE_SHUTDOWN_HOW = TLV_META_TYPE_UINT | 1530
583583
584+ # Resolve hosts/host
585+ TLV_TYPE_RESOLVE_HOST_ENTRY = TLV_META_TYPE_GROUP | 1550
586+
584587##
585588# Railgun
586589##
@@ -1076,8 +1079,12 @@ def netlink_request(req_type, req_data):
10761079
10771080def resolve_host (hostname , family ):
10781081 address_info = getaddrinfo (hostname , family = family , socktype = socket .SOCK_DGRAM , proto = socket .IPPROTO_UDP )
1079- address = address_info [0 ]['sockaddr' ][0 ]
1080- return {'family' : family , 'address' : address , 'packed_address' : inet_pton (family , address )}
1082+ addresses = []
1083+ for addr in address_info :
1084+ binary_address = inet_pton (family , addr ['sockaddr' ][0 ])
1085+ addresses .append (binary_address )
1086+
1087+ return [{ 'family' : family , 'address' : addresses }]
10811088
10821089def tlv_pack_local_addrinfo (sock ):
10831090 local_host , local_port = sock .getsockname ()[:2 ]
@@ -2641,9 +2648,18 @@ def stdapi_net_resolve_host(request, response):
26412648 family = socket .AF_INET6
26422649 else :
26432650 raise Exception ('invalid family' )
2651+
26442652 result = resolve_host (hostname , family )
2645- response += tlv_pack (TLV_TYPE_IP , result ['packed_address' ])
2646- response += tlv_pack (TLV_TYPE_ADDR_TYPE , result ['family' ])
2653+
2654+ for resolved_host in result :
2655+ host_tlv = bytes ()
2656+ for ip in resolved_host ['address' ]:
2657+ host_tlv += tlv_pack (TLV_TYPE_IP , ip )
2658+ host_tlv += tlv_pack (TLV_TYPE_ADDR_TYPE , family )
2659+
2660+
2661+ response += tlv_pack (TLV_TYPE_RESOLVE_HOST_ENTRY , host_tlv )
2662+
26472663 return ERROR_SUCCESS , response
26482664
26492665@register_function
@@ -2661,8 +2677,13 @@ def stdapi_net_resolve_hosts(request, response):
26612677 result = resolve_host (hostname , family )
26622678 except socket .error :
26632679 result = {'family' :family , 'packed_address' :'' }
2664- response += tlv_pack (TLV_TYPE_IP , result ['packed_address' ])
2665- response += tlv_pack (TLV_TYPE_ADDR_TYPE , result ['family' ])
2680+ for resolved_host in result :
2681+ host_tlv = bytes ()
2682+ for ip in resolved_host ['address' ]:
2683+ host_tlv += tlv_pack (TLV_TYPE_IP , ip )
2684+ host_tlv += tlv_pack (TLV_TYPE_ADDR_TYPE , family )
2685+
2686+ response += tlv_pack (TLV_TYPE_RESOLVE_HOST_ENTRY , host_tlv )
26662687 return ERROR_SUCCESS , response
26672688
26682689@register_function
0 commit comments