ifvxlan.c (f53d97231b13165a114ec7f991bccc6567d50b57) | ifvxlan.c (33e0d8f057cf6eda187f09c76ea968c19e176b74) |
---|---|
1/*- 2 * Copyright (c) 2014, Bryan Venteicher <bryanv@FreeBSD.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 222 unchanged lines hidden (view full) --- 231 errx(1, "error in parsing local address string: %s", 232 gai_strerror(error)); 233 234 sa = ai->ai_addr; 235 236 switch (ai->ai_family) { 237#ifdef INET 238 case AF_INET: { | 1/*- 2 * Copyright (c) 2014, Bryan Venteicher <bryanv@FreeBSD.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 222 unchanged lines hidden (view full) --- 231 errx(1, "error in parsing local address string: %s", 232 gai_strerror(error)); 233 234 sa = ai->ai_addr; 235 236 switch (ai->ai_family) { 237#ifdef INET 238 case AF_INET: { |
239 struct in_addr addr = ((struct sockaddr_in *) sa)->sin_addr; | 239 struct sockaddr_in *sin = (struct sockaddr_in *)sa; |
240 | 240 |
241 if (IN_MULTICAST(ntohl(addr.s_addr))) | 241 if (IN_MULTICAST(ntohl(sin->sin_addr.s_addr))) |
242 errx(1, "local address cannot be multicast"); 243 | 242 errx(1, "local address cannot be multicast"); 243 |
244 cmd.vxlcmd_sa.in4.sin_family = AF_INET; 245 cmd.vxlcmd_sa.in4.sin_addr = addr; | 244 cmd.vxlcmd_sa.in4 = *sin; |
246 break; 247 } 248#endif 249#ifdef INET6 250 case AF_INET6: { | 245 break; 246 } 247#endif 248#ifdef INET6 249 case AF_INET6: { |
251 struct in6_addr *addr = &((struct sockaddr_in6 *)sa)->sin6_addr; | 250 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sa; |
252 | 251 |
253 if (IN6_IS_ADDR_MULTICAST(addr)) | 252 if (IN6_IS_ADDR_MULTICAST(&sin6->sin6_addr)) |
254 errx(1, "local address cannot be multicast"); 255 | 253 errx(1, "local address cannot be multicast"); 254 |
256 cmd.vxlcmd_sa.in6.sin6_family = AF_INET6; 257 cmd.vxlcmd_sa.in6.sin6_addr = *addr; | 255 cmd.vxlcmd_sa.in6 = *sin6; |
258 break; 259 } 260#endif 261 default: 262 errx(1, "local address %s not supported", addr); 263 } 264 265 freeaddrinfo(ai); 266 267 if (!vxlan_exists(s)) { 268 if (cmd.vxlcmd_sa.sa.sa_family == AF_INET) { 269 params.vxlp_with |= VXLAN_PARAM_WITH_LOCAL_ADDR4; | 256 break; 257 } 258#endif 259 default: 260 errx(1, "local address %s not supported", addr); 261 } 262 263 freeaddrinfo(ai); 264 265 if (!vxlan_exists(s)) { 266 if (cmd.vxlcmd_sa.sa.sa_family == AF_INET) { 267 params.vxlp_with |= VXLAN_PARAM_WITH_LOCAL_ADDR4; |
270 params.vxlp_local_in4 = cmd.vxlcmd_sa.in4.sin_addr; | 268 params.vxlp_local_sa.in4 = cmd.vxlcmd_sa.in4; |
271 } else { 272 params.vxlp_with |= VXLAN_PARAM_WITH_LOCAL_ADDR6; | 269 } else { 270 params.vxlp_with |= VXLAN_PARAM_WITH_LOCAL_ADDR6; |
273 params.vxlp_local_in6 = cmd.vxlcmd_sa.in6.sin6_addr; | 271 params.vxlp_local_sa.in6 = cmd.vxlcmd_sa.in6; |
274 } 275 return; 276 } 277 278 if (do_cmd(s, VXLAN_CMD_SET_LOCAL_ADDR, &cmd, sizeof(cmd), 1) < 0) 279 err(1, "VXLAN_CMD_SET_LOCAL_ADDR"); 280} 281 --- 11 unchanged lines hidden (view full) --- 293 errx(1, "error in parsing remote address string: %s", 294 gai_strerror(error)); 295 296 sa = ai->ai_addr; 297 298 switch (ai->ai_family) { 299#ifdef INET 300 case AF_INET: { | 272 } 273 return; 274 } 275 276 if (do_cmd(s, VXLAN_CMD_SET_LOCAL_ADDR, &cmd, sizeof(cmd), 1) < 0) 277 err(1, "VXLAN_CMD_SET_LOCAL_ADDR"); 278} 279 --- 11 unchanged lines hidden (view full) --- 291 errx(1, "error in parsing remote address string: %s", 292 gai_strerror(error)); 293 294 sa = ai->ai_addr; 295 296 switch (ai->ai_family) { 297#ifdef INET 298 case AF_INET: { |
301 struct in_addr addr = ((struct sockaddr_in *)sa)->sin_addr; | 299 struct sockaddr_in *sin = (struct sockaddr_in *)sa; |
302 | 300 |
303 if (IN_MULTICAST(ntohl(addr.s_addr))) | 301 if (IN_MULTICAST(ntohl(sin->sin_addr.s_addr))) |
304 errx(1, "remote address cannot be multicast"); 305 | 302 errx(1, "remote address cannot be multicast"); 303 |
306 cmd.vxlcmd_sa.in4.sin_family = AF_INET; 307 cmd.vxlcmd_sa.in4.sin_addr = addr; | 304 cmd.vxlcmd_sa.in4 = *sin; |
308 break; 309 } 310#endif 311#ifdef INET6 312 case AF_INET6: { | 305 break; 306 } 307#endif 308#ifdef INET6 309 case AF_INET6: { |
313 struct in6_addr *addr = &((struct sockaddr_in6 *)sa)->sin6_addr; | 310 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sa; |
314 | 311 |
315 if (IN6_IS_ADDR_MULTICAST(addr)) | 312 if (IN6_IS_ADDR_MULTICAST(&sin6->sin6_addr)) |
316 errx(1, "remote address cannot be multicast"); 317 | 313 errx(1, "remote address cannot be multicast"); 314 |
318 cmd.vxlcmd_sa.in6.sin6_family = AF_INET6; 319 cmd.vxlcmd_sa.in6.sin6_addr = *addr; | 315 cmd.vxlcmd_sa.in6 = *sin6; |
320 break; 321 } 322#endif 323 default: 324 errx(1, "remote address %s not supported", addr); 325 } 326 327 freeaddrinfo(ai); 328 329 if (!vxlan_exists(s)) { 330 if (cmd.vxlcmd_sa.sa.sa_family == AF_INET) { 331 params.vxlp_with |= VXLAN_PARAM_WITH_REMOTE_ADDR4; | 316 break; 317 } 318#endif 319 default: 320 errx(1, "remote address %s not supported", addr); 321 } 322 323 freeaddrinfo(ai); 324 325 if (!vxlan_exists(s)) { 326 if (cmd.vxlcmd_sa.sa.sa_family == AF_INET) { 327 params.vxlp_with |= VXLAN_PARAM_WITH_REMOTE_ADDR4; |
332 params.vxlp_remote_in4 = cmd.vxlcmd_sa.in4.sin_addr; | 328 params.vxlp_remote_sa.in4 = cmd.vxlcmd_sa.in4; |
333 } else { 334 params.vxlp_with |= VXLAN_PARAM_WITH_REMOTE_ADDR6; | 329 } else { 330 params.vxlp_with |= VXLAN_PARAM_WITH_REMOTE_ADDR6; |
335 params.vxlp_remote_in6 = cmd.vxlcmd_sa.in6.sin6_addr; | 331 params.vxlp_remote_sa.in6 = cmd.vxlcmd_sa.in6; |
336 } 337 return; 338 } 339 340 if (do_cmd(s, VXLAN_CMD_SET_REMOTE_ADDR, &cmd, sizeof(cmd), 1) < 0) 341 err(1, "VXLAN_CMD_SET_REMOTE_ADDR"); 342} 343 --- 11 unchanged lines hidden (view full) --- 355 errx(1, "error in parsing group address string: %s", 356 gai_strerror(error)); 357 358 sa = ai->ai_addr; 359 360 switch (ai->ai_family) { 361#ifdef INET 362 case AF_INET: { | 332 } 333 return; 334 } 335 336 if (do_cmd(s, VXLAN_CMD_SET_REMOTE_ADDR, &cmd, sizeof(cmd), 1) < 0) 337 err(1, "VXLAN_CMD_SET_REMOTE_ADDR"); 338} 339 --- 11 unchanged lines hidden (view full) --- 351 errx(1, "error in parsing group address string: %s", 352 gai_strerror(error)); 353 354 sa = ai->ai_addr; 355 356 switch (ai->ai_family) { 357#ifdef INET 358 case AF_INET: { |
363 struct in_addr addr = ((struct sockaddr_in *)sa)->sin_addr; | 359 struct sockaddr_in *sin = (struct sockaddr_in *)sa; |
364 | 360 |
365 if (!IN_MULTICAST(ntohl(addr.s_addr))) | 361 if (!IN_MULTICAST(ntohl(sin->sin_addr.s_addr))) |
366 errx(1, "group address must be multicast"); 367 | 362 errx(1, "group address must be multicast"); 363 |
368 cmd.vxlcmd_sa.in4.sin_family = AF_INET; 369 cmd.vxlcmd_sa.in4.sin_addr = addr; | 364 cmd.vxlcmd_sa.in4 = *sin; |
370 break; 371 } 372#endif 373#ifdef INET6 374 case AF_INET6: { | 365 break; 366 } 367#endif 368#ifdef INET6 369 case AF_INET6: { |
375 struct in6_addr *addr = &((struct sockaddr_in6 *)sa)->sin6_addr; | 370 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sa; |
376 | 371 |
377 if (!IN6_IS_ADDR_MULTICAST(addr)) | 372 if (!IN6_IS_ADDR_MULTICAST(&sin6->sin6_addr)) |
378 errx(1, "group address must be multicast"); 379 | 373 errx(1, "group address must be multicast"); 374 |
380 cmd.vxlcmd_sa.in6.sin6_family = AF_INET6; 381 cmd.vxlcmd_sa.in6.sin6_addr = *addr; | 375 cmd.vxlcmd_sa.in6 = *sin6; |
382 break; 383 } 384#endif 385 default: 386 errx(1, "group address %s not supported", addr); 387 } 388 389 freeaddrinfo(ai); 390 391 if (!vxlan_exists(s)) { 392 if (cmd.vxlcmd_sa.sa.sa_family == AF_INET) { 393 params.vxlp_with |= VXLAN_PARAM_WITH_REMOTE_ADDR4; | 376 break; 377 } 378#endif 379 default: 380 errx(1, "group address %s not supported", addr); 381 } 382 383 freeaddrinfo(ai); 384 385 if (!vxlan_exists(s)) { 386 if (cmd.vxlcmd_sa.sa.sa_family == AF_INET) { 387 params.vxlp_with |= VXLAN_PARAM_WITH_REMOTE_ADDR4; |
394 params.vxlp_remote_in4 = cmd.vxlcmd_sa.in4.sin_addr; | 388 params.vxlp_remote_sa.in4 = cmd.vxlcmd_sa.in4; |
395 } else { 396 params.vxlp_with |= VXLAN_PARAM_WITH_REMOTE_ADDR6; | 389 } else { 390 params.vxlp_with |= VXLAN_PARAM_WITH_REMOTE_ADDR6; |
397 params.vxlp_remote_in6 = cmd.vxlcmd_sa.in6.sin6_addr; | 391 params.vxlp_remote_sa.in6 = cmd.vxlcmd_sa.in6; |
398 } 399 return; 400 } 401 402 if (do_cmd(s, VXLAN_CMD_SET_REMOTE_ADDR, &cmd, sizeof(cmd), 1) < 0) 403 err(1, "VXLAN_CMD_SET_REMOTE_ADDR"); 404} 405 --- 242 unchanged lines hidden --- | 392 } 393 return; 394 } 395 396 if (do_cmd(s, VXLAN_CMD_SET_REMOTE_ADDR, &cmd, sizeof(cmd), 1) < 0) 397 err(1, "VXLAN_CMD_SET_REMOTE_ADDR"); 398} 399 --- 242 unchanged lines hidden --- |