MCPcopy Create free account
hub / github.com/F-Stack/f-stack / cleanup_xaddrs_gateway

Function cleanup_xaddrs_gateway

lib/ff_route.c:180–232  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

178}
179
180static int
181cleanup_xaddrs_gateway(struct rt_addrinfo *info)
182{
183 struct sockaddr *gw = info->rti_info[RTAX_GATEWAY];
184
185 if (info->rti_flags & RTF_LLDATA)
186 return (cleanup_xaddrs_lladdr(info));
187
188 switch (gw->sa_family) {
189 case AF_INET:
190 {
191 struct sockaddr_in *gw_sin = (struct sockaddr_in *)gw;
192 if (gw_sin->sin_len < sizeof(struct sockaddr_in)) {
193 printf("gw sin_len too small\n");
194 return (EINVAL);
195 }
196 fill_sockaddr_inet(gw_sin, gw_sin->sin_addr);
197 }
198 break;
199#ifdef INET6
200 case AF_INET6:
201 {
202 struct sockaddr_in6 *gw_sin6 = (struct sockaddr_in6 *)gw;
203 if (gw_sin6->sin6_len < sizeof(struct sockaddr_in6)) {
204 printf("gw sin6_len too small\n");
205 return (EINVAL);
206 }
207 fill_sockaddr_inet6(gw_sin6, &gw_sin6->sin6_addr, 0);
208 break;
209 }
210#endif
211 case AF_LINK:
212 {
213 struct sockaddr_dl_short *gw_sdl;
214
215 gw_sdl = (struct sockaddr_dl_short *)gw;
216 if (gw_sdl->sdl_len < sizeof(struct sockaddr_dl_short)) {
217 printf("gw sdl_len too small\n");
218 return (EINVAL);
219 }
220
221 const struct sockaddr_dl_short sdl = {
222 .sdl_family = AF_LINK,
223 .sdl_len = sizeof(struct sockaddr_dl_short),
224 .sdl_index = gw_sdl->sdl_index,
225 };
226 *gw_sdl = sdl;
227 break;
228 }
229 }
230
231 return (0);
232}
233
234static void
235remove_netmask(struct rt_addrinfo *info)

Callers 2

cleanup_xaddrs_inetFunction · 0.70
cleanup_xaddrs_inet6Function · 0.70

Calls 4

cleanup_xaddrs_lladdrFunction · 0.70
printfFunction · 0.70
fill_sockaddr_inetFunction · 0.70
fill_sockaddr_inet6Function · 0.70

Tested by

no test coverage detected