diff --git a/i2p2www/spec/proposals/167-service-records.rst b/i2p2www/spec/proposals/167-service-records.rst index 76408ddb2b259a93853ef753cf83b67dde307f62..91a4c928179a5aa15e370f38d2cc7bcb44a8cd96 100644 --- a/i2p2www/spec/proposals/167-service-records.rst +++ b/i2p2www/spec/proposals/167-service-records.rst @@ -5,7 +5,7 @@ Service Records in LS2 :author: zzz :created: 2024-06-22 :thread: http://zzz.i2p/topics/3641 - :lastupdated: 2024-06-22 + :lastupdated: 2024-06-28 :status: Open :target: 0.9.65 @@ -66,6 +66,14 @@ a service for aaa...aaa.b32.i2p does not require that lookup, it can just connec But there's an ambiguity there, because example.i2p can also be addressed by its b32. +MX Records +---------- + +SRV records are simply a generic version of MX records for any service. +"_smtp._tcp" is the "MX" record. +There is no need for MX records if we have SRV records, and MX records +alone does not provide a generic record for any service. + Design ====== @@ -82,6 +90,10 @@ a different hostname/b32. If the target destination for the service is different, the target LS must also include a service record, pointing to itself, indicating that it supports the service. +The design does not require special support or caching or any changes in the floodfills. +Only the leaseset publisher, and the client looking up a service record, +must support these changes. + Specification @@ -99,7 +111,7 @@ Defined as follows: Standard identifiers from [REGISTRY]_ or Linux /etc/services must be used if defined there. - proto := The transport protocol of the desired service. Must be lower case, either "tcp" or "udp". "tcp" means streaming and "udp" means repliable datagrams. - Indicators for raw datagrams and datagram2 may be defined later. + Protocol indicators for raw datagrams and datagram2 may be defined later. Allowed chars are [a-z0-9-] and must not start or end with a '-'. - optionvalue := self | srvrecord[,srvrecord]* - self := "0" ttl port [appoptions] @@ -152,6 +164,14 @@ Differences from [RFC2782]_ - Additional appoptions field +Notes +````` + +No wildcarding such as "*", "*._tcp", or "_tcp" is allowed. +Each supported service must have its own record. + + + Service Name Registry ---------------------- @@ -247,7 +267,7 @@ Caching of service records up to the TTL may be done by the router or the applic implementation-dependent. Whether to cache persistently is also implementation-dependent. Configuration is implementation-dependent. We may define standard I2CP options -for i2ptunnel and SAM. +for i2ptunnel and SAM, to be documented in [I2CP-OPTIONS]_. Naming service subsystems must check for a leading "_", strip off the first two labels, look up the leaseset for the remaining part of the hostname, and then lookup the @@ -267,9 +287,13 @@ Any router requesting the leaseset will be able to see the service records. Compatibility =============== -No issues. All known implementations currently ignore the properties field in LS2. +No issues. All known implementations currently ignore the options field in LS2, +and correctly skip over a non-empty options field. +This was verified in recent testing by both Java I2P and i2pd. LS2 was implemented in 0.9.38 in 2016 and is well-supported by all router implementations. +The design does not require special support or caching or any changes in the floodfills. + '_' is not a valid character in i2p hostnames. @@ -289,6 +313,9 @@ References .. [I2CP] {{ spec_url('i2cp') }} +.. [I2CP-OPTIONS] + {{ site_url('docs/protocol/i2cp', True) }} + .. [LS2] {{ spec_url('common-structures') }}