From 619304cd878299078b5dde9ad0fe30c3a7592026 Mon Sep 17 00:00:00 2001 From: Shawn Routhier Date: Mon, 25 Nov 2013 21:00:41 -0800 Subject: [master] Support using v6 relay options in server decicions. --- server/dhcpv6.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'server/dhcpv6.c') diff --git a/server/dhcpv6.c b/server/dhcpv6.c index 6daba5e4..45ea753c 100644 --- a/server/dhcpv6.c +++ b/server/dhcpv6.c @@ -6299,41 +6299,54 @@ static void build_dhcpv6_reply(struct data_string *reply, struct packet *packet) { memset(reply, 0, sizeof(*reply)); - /* Classify the client */ - classify_client(packet); + /* I would like to classify the client once here, but + * as I don't want to classify all of the incoming packets + * I need to do it before handling specific types. + * We don't need to classify if we are tossing the packet + * or if it is a relay - the classification step will get + * done when we process the inner client packet. + */ switch (packet->dhcpv6_msg_type) { case DHCPV6_SOLICIT: + classify_client(packet); dhcpv6_solicit(reply, packet); break; case DHCPV6_ADVERTISE: dhcpv6_discard(packet); break; case DHCPV6_REQUEST: + classify_client(packet); dhcpv6_request(reply, packet); break; case DHCPV6_CONFIRM: + classify_client(packet); dhcpv6_confirm(reply, packet); break; case DHCPV6_RENEW: + classify_client(packet); dhcpv6_renew(reply, packet); break; case DHCPV6_REBIND: + classify_client(packet); dhcpv6_rebind(reply, packet); break; case DHCPV6_REPLY: dhcpv6_discard(packet); break; case DHCPV6_RELEASE: + classify_client(packet); dhcpv6_release(reply, packet); break; case DHCPV6_DECLINE: + classify_client(packet); dhcpv6_decline(reply, packet); break; case DHCPV6_RECONFIGURE: dhcpv6_discard(packet); break; case DHCPV6_INFORMATION_REQUEST: + classify_client(packet); dhcpv6_information_request(reply, packet); break; case DHCPV6_RELAY_FORW: @@ -6343,6 +6356,7 @@ build_dhcpv6_reply(struct data_string *reply, struct packet *packet) { dhcpv6_discard(packet); break; case DHCPV6_LEASEQUERY: + classify_client(packet); dhcpv6_leasequery(reply, packet); break; case DHCPV6_LEASEQUERY_REPLY: -- cgit v1.2.1