blob: f783f319675bbb3fa440eee4297f2430b20df517 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package netstack
import (
"syscall/zx/fidl"
"netstack/dns"
"netstack/fidlconv"
"syslog"
"fidl/fuchsia/net"
"fidl/fuchsia/net/name"
"gvisor.dev/gvisor/pkg/tcpip"
)
const tag = "nameLookupAdmin"
func dnsServerToFidl(s dns.Server) name.DnsServer {
return name.DnsServer{
Address: fidlconv.ToNetSocketAddress(s.Address),
AddressPresent: true,
Source: s.Source,
SourcePresent: true,
}
}
type nameLookupAdminImpl struct {
ns *Netstack
}
var _ name.LookupAdminWithCtx = (*nameLookupAdminImpl)(nil)
func (dns *nameLookupAdminImpl) SetDefaultDnsServers(_ fidl.Context, servers []net.IpAddress) (name.LookupAdminSetDefaultDnsServersResult, error) {
ss := make([]tcpip.Address, len(servers))
for i, s := range servers {
ss[i] = fidlconv.ToTCPIPAddress(s)
}
syslog.InfoTf(tag, "setting default name servers: %s", ss)
dns.ns.dnsClient.SetDefaultServers(ss)
// NOTE(brunodalbo) we're not bothering checking for invalid server addresses here in expectation that this
// implementation will move to dns_resolver.
return name.LookupAdminSetDefaultDnsServersResultWithResponse(name.LookupAdminSetDefaultDnsServersResponse{}), nil
}
func (dns *nameLookupAdminImpl) GetDnsServers(fidl.Context) ([]name.DnsServer, error) {
cache := dns.ns.dnsClient.GetServersCache()
servers := make([]name.DnsServer, 0, len(cache))
for _, s := range cache {
servers = append(servers, dnsServerToFidl(s))
}
return servers, nil
}