| /* |
| * Copyright (C) 2019 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| syntax = "proto3"; |
| package android.net; |
| |
| // Used to indicate which call is invoked to send DNS lookups. |
| enum CallType { |
| CALL_GETADDRINFO = 0; |
| CALL_GETHOSTBYNAME = 1; |
| CALL_GETHOSTBYADDR = 2; |
| CALL_GETNAMEINFO = 3; |
| CALL_RES_NSEND = 4; |
| } |
| |
| // Values from bionic/libc/include/sys/socket.h |
| enum AddressFamily { |
| option allow_alias = true; // for AF_ROUTE = AF_NETLINK |
| |
| GT_AF_UNSPEC = 0; |
| GT_AF_UNIX = 1; |
| GT_AF_LOCAL = 1; |
| GT_AF_INET = 2; |
| GT_AF_AX25 = 3; |
| GT_AF_IPX = 4; |
| GT_AF_APPLETALK = 5; |
| GT_AF_NETROM = 6; |
| GT_AF_BRIDGE = 7; |
| GT_AF_ATMPVC= 8; |
| GT_AF_X25 = 9; |
| GT_AF_INET6 = 10; |
| GT_AF_ROSE = 11; |
| GT_AF_DECnet = 12; |
| GT_AF_NETBEUI = 13; |
| GT_AF_SECURITY = 14; |
| GT_AF_KEY = 15; |
| GT_AF_NETLINK = 16; |
| GT_AF_ROUTE = 16; // AF_NETLINK |
| GT_AF_PACKET = 17; |
| GT_AF_ASH = 18; |
| GT_AF_ECONET = 19; |
| GT_AF_ATMSVC = 20; |
| GT_AF_RDS = 21; |
| GT_AF_SNA = 22; |
| GT_AF_IRDA = 23; |
| GT_AF_PPPOX = 24; |
| GT_AF_WANPIPE = 25; |
| GT_AF_LLC = 26; |
| GT_AF_CAN = 29; |
| GT_AF_TIPC = 30; |
| GT_AF_BLUETOOTH = 31; |
| GT_AF_IUCV = 32; |
| GT_AF_RXRPC = 33; |
| GT_AF_ISDN = 34; |
| GT_AF_PHONET = 35; |
| GT_AF_IEEE802154 = 36; |
| GT_AF_CAIF = 37; |
| GT_AF_ALG = 38; |
| GT_AF_NFC = 39; |
| GT_AF_VSOCK = 40; |
| GT_AF_KCM = 41; |
| GT_AF_QIPCRTR = 42; |
| GT_AF_MAX = 43; |
| } |
| |
| // Values from bionic/libc/include/sys/socket.h |
| enum SocketType { |
| GT_SOCK_ANY = 0; // See man getaddrinfo for more detail |
| GT_SOCK_STREAM = 1; |
| GT_SOCK_DGRAM = 2; |
| GT_SOCK_RAW = 3; |
| GT_SOCK_RDM = 4; |
| GT_SOCK_SEQPACKET = 5; |
| GT_SOCK_DCCP = 6; |
| GT_SOCK_PACKET = 10; |
| } |
| |
| // Values from bionic/libc/kernel/uapi/linux/in.h |
| enum ProtocolType { |
| GT_IPPROTO_IP = 0; |
| GT_IPPROTO_ICMP = 1; |
| GT_IPPROTO_IGMP = 2; |
| GT_IPPROTO_IPIP = 4; |
| GT_IPPROTO_TCP = 6; |
| GT_IPPROTO_EGP = 8; |
| GT_IPPROTO_PUP = 12; |
| GT_IPPROTO_UDP = 17; |
| GT_IPPROTO_IDP = 22; |
| GT_IPPROTO_TP = 29; |
| GT_IPPROTO_DCCP = 33; |
| GT_IPPROTO_IPV6 = 41; |
| GT_IPPROTO_RSVP = 46; |
| GT_IPPROTO_GRE = 47; |
| GT_IPPROTO_ESP = 50; |
| GT_IPPROTO_AH = 51; |
| GT_IPPROTO_MTP = 92; |
| GT_IPPROTO_BEETPH = 94; |
| GT_IPPROTO_ENCAP = 98; |
| GT_IPPROTO_PIM = 103; |
| GT_IPPROTO_COMP = 108; |
| GT_IPPROTO_SCTP = 132; |
| GT_IPPROTO_UDPLITE = 136; |
| GT_IPPROTO_MPLS = 137; |
| GT_IPPROTO_RAW = 255; |
| GT_IPPROTO_MAX = 256; |
| } |
| |
| // The return value of the DNS resolver for each DNS lookups. |
| // Values from bionic/libc/include/netdb.h |
| // Values from system/netd/resolv/include/netd_resolv/resolv.h |
| enum ReturnCodeType { |
| GT_EAI_NO_ERROR = 0; |
| GT_EAI_ADDRFAMILY = 1; |
| GT_EAI_AGAIN = 2; |
| GT_EAI_BADFLAGS = 3; |
| GT_EAI_FAIL = 4; |
| GT_EAI_FAMILY = 5; |
| GT_EAI_MEMORY = 6; |
| GT_EAI_NODATA = 7; |
| GT_EAI_NONAME = 8; |
| GT_EAI_SERVICE = 9; |
| GT_EAI_SOCKTYPE = 10; |
| GT_EAI_SYSTEM = 11; |
| GT_EAI_BADHINTS = 12; |
| GT_EAI_PROTOCOL = 13; |
| GT_EAI_OVERFLOW = 14; |
| GT_RESOLV_TIMEOUT = 255; |
| GT_EAI_MAX = 256; |
| } |
| |
| // Describes the test configuration and expected result for gold test. |
| // The unit test files a DNS query by the predefined |config|. Expect that the resolver sends the |
| // query packet as the predefined packet in |packet_mapping.query|. When the DNS responser receives |
| // the query packet, it returns the corresponding response packet from |packet_mapping.response|. |
| // Finally, the unit test checks the return values if they are the same as |result|. Currently, |
| // support getaddrinfo only. |
| // TODO: Support gethostbyname, gethostbyaddr, and getnameinfo. |
| message GoldTest { |
| // The configuration of various DNS query calls. |
| message Config { |
| // The arguments used to send a DNS query by call type CALL_GETADDRINFO. |
| message AddrInfo { |
| string host = 1; |
| AddressFamily family = 2; |
| SocketType socktype = 3; |
| ProtocolType protocol = 4; |
| int32 ai_flags = 5; |
| } |
| |
| // The arguments used to send a DNS query by call type CALL_GETHOSTBYNAME. |
| message HostByName { |
| string host = 1; |
| AddressFamily family = 2; |
| } |
| |
| // The call is used to send DNS lookups. |
| CallType call = 1; |
| |
| // The arguments are used by the call. |
| oneof Arg { |
| // The arguments of call type CALL_GETADDRINFO. |
| AddrInfo addrinfo = 2; |
| HostByName hostbyname = 3; |
| } |
| }; |
| |
| // The result is expected in DNS lookups. |
| message Result { |
| ReturnCodeType return_code = 1; |
| repeated string addresses = 2; |
| }; |
| |
| // Describes how the DNS responser handles and responses the DNS lookup packets. |
| message PacketMapping { |
| bytes query = 1; |
| bytes response = 2; |
| } |
| |
| // Configs used to send a DNS query via a DNS query API. |
| Config config = 1; |
| |
| // Expected return values from DNS query API. |
| Result result = 2; |
| |
| // Used to build the packet mapping (query, response) in DNS responser. See also |
| // addMappingBinaryPacket() in |
| // packages/modules/DnsResolver/tests/dns_responder/dns_responder.cpp. |
| repeated PacketMapping packet_mapping = 3; |
| } |