203 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Protocol Buffer
		
	
	
	
			
		
		
	
	
			203 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Protocol Buffer
		
	
	
	
| /*
 | |
|  * 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;
 | |
| }
 |