[systemd-devel] [PATCH 01/28] dhcp: Add DHCP protocol structures and initial defines

Lennart Poettering lennart at poettering.net
Wed Nov 13 17:00:51 PST 2013


On Thu, 14.11.13 09:50, Marcel Holtmann (marcel at holtmann.org) wrote:

> >>>>> +#define BOOTREQUEST                             1
> >>>>> +#define BOOTREPLY                               2
> >>>>> +
> >>>>> +#define DHCP_DISCOVER                           1
> >>>>> +#define DHCP_OFFER                              2
> >>>>> +#define DHCP_REQUEST                            3
> >>>>> +#define DHCP_DECLINE                            4
> >>>>> +#define DHCP_ACK                                5
> >>>>> +#define DHCP_NAK                                6
> >>>>> +#define DHCP_RELEASE                            7
> >>>>> +
> >>>>> +#define DHCP_OVERLOAD_FILE                      1
> >>>>> +#define DHCP_OVERLOAD_SNAME                     2
> >>>>> +
> >>>>> +#define DHCP_OPTION_PAD                         0
> >>>>> +#define DHCP_OPTION_SUBNET_MASK                 1
> >>>>> +#define DHCP_OPTION_ROUTER                      3
> >>>>> +#define DHCP_OPTION_DOMAIN_NAME_SERVER          6
> >>>>> +#define DHCP_OPTION_HOST_NAME                   12
> >>>>> +#define DHCP_OPTION_DOMAIN_NAME                 15
> >>>>> +#define DHCP_OPTION_NTP_SERVER                  42
> >>>>> +#define DHCP_OPTION_REQUESTED_IP_ADDRESS        50
> >>>>> +#define DHCP_OPTION_OVERLOAD                    52
> >>>>> +#define DHCP_OPTION_MESSAGE_TYPE                53
> >>>>> +#define DHCP_OPTION_PARAMETER_REQUEST_LIST      55
> >>>>> +#define DHCP_OPTION_END                         255
> >>>> 
> >>>> For defines like these I'd really suggest using anonymous enums. It's a
> >>>> good thing if the compiler knows these things, not just the
> >>>> pre-processor...
> >>> 
> >>> these are wire protocol definitions. What benefit do you gain if the
> >>> compiler knows them. You always have to handle invalid cases anyway
> >>> since malicious servers are a reality.
> >> 
> >> For example, it's nicer to work with gdb if it can resolve them...
> > You'll also get an error if you use an enum value of one kind
> > in a call requiring an enum of different type.
> 
> as I said, these are wire protocol definitions. They come in as bits and bytes and not as enums.

I was suggesting an *anonymous* enum. That doesn't introduce a type or
anything, it just maps name to integers (of any size). That's all. And
it does so on the compiler level, rather than in the pre-processor. This
is useful because gdb knows about the thing then.

Lennart

-- 
Lennart Poettering, Red Hat


More information about the systemd-devel mailing list