• Vladislav Grishenko's avatar
    Improve RFC-compliance when unable to supply addresses in DHCPv6 · b9ff5c8f
    Vladislav Grishenko authored
    While testing https://github.com/sbyx/odhcp6c client I have noticed it
    permanently crashes after startup.
    
    The reason was it (odhcp6c) doesn't expect empty IA options in ADVERTISE
    message without any suboptions.
    
    Despite this validation bug of odhcp6c, dnsmasq should not generate
    ADVERTISE messages with IA if there's nothing to advert per  RFC 3315
    17.2.2:
    
       If the server will not assign any addresses to any IAs in a
    
       subsequent Request from the client, the server MUST send an Advertise
    
       message to the client that includes only a Status Code option with
    
       code NoAddrsAvail and a status message for the user, a Server
    
       Identifier option with the server's DUID, and a Client Identifier
    
       option with the client's DUID.
    
    Meanwhile it's need to add status code for every IA in REPLY message per
    RFC3315 18.2.1:
    
       If the server cannot assign any addresses to an IA in the message
       from the client, the server MUST include the IA in the Reply message
       with no addresses in the IA and a Status Code option in the IA
       containing status code NoAddrsAvail.
    
    So, I've changed the logic to skip IA completely from ADVERTISE messages and
    to add NoAddrsAvail subcode into IA of REPLY messages.
    
    As for overhead, yes, I believe it's ok to return NoAddrsAvail twice in IA
    and in global section for compatibility with all old and new clients.
    b9ff5c8f
rfc3315.c 62.9 KB