]>
Commit | Line | Data |
---|---|---|
d8feb2d7 SS |
1 | diff -up dhcp-4.3.4/server/dhcp.c.IPoIB-log-id dhcp-4.3.4/server/dhcp.c |
2 | --- dhcp-4.3.4/server/dhcp.c.IPoIB-log-id 2016-04-29 12:52:14.285061620 +0200 | |
3 | +++ dhcp-4.3.4/server/dhcp.c 2016-04-29 12:53:59.535088020 +0200 | |
4 | @@ -85,6 +85,42 @@ const int dhcp_type_name_max = ((sizeof | |
5 | # define send_packet trace_packet_send | |
6 | #endif | |
7 | ||
8 | +char *print_client_identifier_from_packet (packet) | |
9 | + struct packet *packet; | |
10 | +{ | |
11 | + struct option_cache *oc; | |
12 | + struct data_string client_identifier; | |
13 | + char *ci; | |
14 | + | |
15 | + memset (&client_identifier, 0, sizeof client_identifier); | |
16 | + | |
17 | + oc = lookup_option (&dhcp_universe, packet -> options, | |
18 | + DHO_DHCP_CLIENT_IDENTIFIER); | |
19 | + if (oc && | |
20 | + evaluate_option_cache (&client_identifier, | |
21 | + packet, (struct lease *)0, | |
22 | + (struct client_state *)0, | |
23 | + packet -> options, | |
24 | + (struct option_state *)0, | |
25 | + &global_scope, oc, MDL)) { | |
26 | + ci = print_hw_addr (HTYPE_INFINIBAND, client_identifier.len, client_identifier.data); | |
27 | + data_string_forget (&client_identifier, MDL); | |
28 | + return ci; | |
29 | + } else | |
30 | + return "\"no client id\""; | |
31 | +} | |
32 | + | |
33 | +char *print_hw_addr_or_client_id (packet) | |
34 | + struct packet *packet; | |
35 | +{ | |
36 | + if (packet -> raw -> htype == HTYPE_INFINIBAND) | |
37 | + return print_client_identifier_from_packet (packet); | |
38 | + else | |
39 | + return print_hw_addr (packet -> raw -> htype, | |
40 | + packet -> raw -> hlen, | |
41 | + packet -> raw -> chaddr); | |
42 | +} | |
43 | + | |
44 | void | |
45 | dhcp (struct packet *packet) { | |
46 | int ms_nulltp = 0; | |
47 | @@ -127,9 +163,7 @@ dhcp (struct packet *packet) { | |
48 | ||
49 | log_info("%s from %s via %s: %s", s, | |
50 | (packet->raw->htype | |
51 | - ? print_hw_addr(packet->raw->htype, | |
52 | - packet->raw->hlen, | |
53 | - packet->raw->chaddr) | |
54 | + ? print_hw_addr_or_client_id(packet) | |
55 | : "<no identifier>"), | |
56 | packet->raw->giaddr.s_addr | |
57 | ? inet_ntoa(packet->raw->giaddr) | |
58 | @@ -326,9 +360,7 @@ void dhcpdiscover (packet, ms_nulltp) | |
59 | #endif | |
60 | snprintf (msgbuf, sizeof msgbuf, "DHCPDISCOVER from %s %s%s%svia %s", | |
61 | (packet -> raw -> htype | |
62 | - ? print_hw_addr (packet -> raw -> htype, | |
63 | - packet -> raw -> hlen, | |
64 | - packet -> raw -> chaddr) | |
65 | + ? print_hw_addr_or_client_id (packet) | |
66 | : (lease | |
67 | ? print_hex_1(lease->uid_len, lease->uid, 60) | |
68 | : "<no identifier>")), | |
69 | @@ -540,9 +572,7 @@ void dhcprequest (packet, ms_nulltp, ip_ | |
70 | "DHCPREQUEST for %s%s from %s %s%s%svia %s", | |
71 | piaddr (cip), smbuf, | |
72 | (packet -> raw -> htype | |
73 | - ? print_hw_addr (packet -> raw -> htype, | |
74 | - packet -> raw -> hlen, | |
75 | - packet -> raw -> chaddr) | |
76 | + ? print_hw_addr_or_client_id(packet) | |
77 | : (lease | |
78 | ? print_hex_1(lease->uid_len, lease->uid, 60) | |
79 | : "<no identifier>")), | |
80 | @@ -783,9 +813,7 @@ void dhcprelease (packet, ms_nulltp) | |
81 | if ((oc = lookup_option (&dhcp_universe, packet -> options, | |
82 | DHO_DHCP_REQUESTED_ADDRESS))) { | |
83 | log_info ("DHCPRELEASE from %s specified requested-address.", | |
84 | - print_hw_addr (packet -> raw -> htype, | |
85 | - packet -> raw -> hlen, | |
86 | - packet -> raw -> chaddr)); | |
87 | + print_hw_addr_or_client_id(packet)); | |
88 | } | |
89 | ||
90 | oc = lookup_option (&dhcp_universe, packet -> options, | |
91 | @@ -877,9 +905,7 @@ void dhcprelease (packet, ms_nulltp) | |
92 | "DHCPRELEASE of %s from %s %s%s%svia %s (%sfound)", | |
93 | cstr, | |
94 | (packet -> raw -> htype | |
95 | - ? print_hw_addr (packet -> raw -> htype, | |
96 | - packet -> raw -> hlen, | |
97 | - packet -> raw -> chaddr) | |
98 | + ? print_hw_addr_or_client_id(packet) | |
99 | : (lease | |
100 | ? print_hex_1(lease->uid_len, lease->uid, 60) | |
101 | : "<no identifier>")), | |
102 | @@ -984,9 +1010,7 @@ void dhcpdecline (packet, ms_nulltp) | |
103 | "DHCPDECLINE of %s from %s %s%s%svia %s", | |
104 | piaddr (cip), | |
105 | (packet -> raw -> htype | |
106 | - ? print_hw_addr (packet -> raw -> htype, | |
107 | - packet -> raw -> hlen, | |
108 | - packet -> raw -> chaddr) | |
109 | + ? print_hw_addr_or_client_id(packet) | |
110 | : (lease | |
111 | ? print_hex_1(lease->uid_len, lease->uid, 60) | |
112 | : "<no identifier>")), | |
113 | @@ -1683,8 +1707,7 @@ void dhcpinform (packet, ms_nulltp) | |
114 | /* Report what we're sending. */ | |
115 | snprintf(msgbuf, sizeof msgbuf, "DHCPACK to %s (%s) via", piaddr(cip), | |
116 | (packet->raw->htype && packet->raw->hlen) ? | |
117 | - print_hw_addr(packet->raw->htype, packet->raw->hlen, | |
118 | - packet->raw->chaddr) : | |
119 | + print_hw_addr_or_client_id(packet) : | |
120 | "<no client hardware address>"); | |
121 | log_info("%s %s", msgbuf, gip.len ? piaddr(gip) : | |
122 | packet->interface->name); | |
123 | @@ -1862,9 +1885,7 @@ void nak_lease (packet, cip, network_gro | |
124 | #endif | |
125 | log_info ("DHCPNAK on %s to %s via %s", | |
126 | piaddr (*cip), | |
127 | - print_hw_addr (packet -> raw -> htype, | |
128 | - packet -> raw -> hlen, | |
129 | - packet -> raw -> chaddr), | |
130 | + print_hw_addr_or_client_id(packet), | |
131 | packet -> raw -> giaddr.s_addr | |
132 | ? inet_ntoa (packet -> raw -> giaddr) | |
133 | : packet -> interface -> name); | |
134 | @@ -3859,7 +3880,7 @@ void dhcp_reply (lease) | |
135 | ? (state -> offer == DHCPACK ? "DHCPACK" : "DHCPOFFER") | |
136 | : "BOOTREPLY"), | |
137 | piaddr (lease -> ip_addr), | |
138 | - (lease -> hardware_addr.hlen | |
139 | + (lease -> hardware_addr.hlen > 1 | |
140 | ? print_hw_addr (lease -> hardware_addr.hbuf [0], | |
141 | lease -> hardware_addr.hlen - 1, | |
142 | &lease -> hardware_addr.hbuf [1]) | |
143 | @@ -4408,10 +4429,7 @@ int find_lease (struct lease **lp, | |
144 | if (uid_lease) { | |
145 | if (uid_lease->binding_state == FTS_ACTIVE) { | |
146 | log_error ("client %s has duplicate%s on %s", | |
147 | - (print_hw_addr | |
148 | - (packet -> raw -> htype, | |
149 | - packet -> raw -> hlen, | |
150 | - packet -> raw -> chaddr)), | |
151 | + (print_hw_addr_or_client_id(packet)), | |
152 | " leases", | |
153 | (ip_lease -> subnet -> | |
154 | shared_network -> name)); | |
155 | @@ -4578,9 +4596,7 @@ int find_lease (struct lease **lp, | |
156 | log_error("uid lease %s for client %s is duplicate " | |
157 | "on %s", | |
158 | piaddr(uid_lease->ip_addr), | |
159 | - print_hw_addr(packet->raw->htype, | |
160 | - packet->raw->hlen, | |
161 | - packet->raw->chaddr), | |
162 | + print_hw_addr_or_client_id(packet), | |
163 | uid_lease->subnet->shared_network->name); | |
164 | ||
165 | if (!packet -> raw -> ciaddr.s_addr && |