| 420 | |
| 421 | |
| 422 | class ifaddrmsg_rtattr(Packet): |
| 423 | fields_desc = [ |
| 424 | FieldLenField( |
| 425 | "rta_len", None, length_of="rta_data", fmt="=H", adjust=lambda _, x: x + 4 |
| 426 | ), |
| 427 | EnumField( |
| 428 | "rta_type", |
| 429 | 0, |
| 430 | { |
| 431 | 0x00: "IFA_UNSPEC", |
| 432 | 0x01: "IFA_ADDRESS", |
| 433 | 0x02: "IFA_LOCAL", |
| 434 | 0x03: "IFA_LABEL", |
| 435 | 0x04: "IFA_BROADCAST", |
| 436 | 0x05: "IFA_ANYCAST", |
| 437 | 0x06: "IFA_CACHEINFO", |
| 438 | 0x07: "IFA_MULTICAST", |
| 439 | 0x08: "IFA_FLAGS", |
| 440 | 0x09: "IFA_RT_PRIORITY", |
| 441 | 0x0A: "IFA_TARGET_NETNSID", |
| 442 | 0x0B: "IFA_PROTO", |
| 443 | }, |
| 444 | fmt="=H", |
| 445 | ), |
| 446 | PadField( |
| 447 | MultipleTypeField( |
| 448 | [ |
| 449 | # IFA_ADDRESS, IFA_LOCAL, IFA_BROADCAST |
| 450 | ( |
| 451 | IPField("rta_data", "0.0.0.0"), |
| 452 | lambda pkt: pkt.parent |
| 453 | and pkt.parent.ifa_family == 2 |
| 454 | and pkt.rta_type in [0x01, 0x02, 0x04], |
| 455 | ), |
| 456 | ( |
| 457 | IP6Field("rta_data", "::"), |
| 458 | lambda pkt: pkt.parent |
| 459 | and pkt.parent.ifa_family == 10 |
| 460 | and pkt.rta_type in [0x01, 0x02, 0x04], |
| 461 | ), |
| 462 | ( |
| 463 | # IFA_LABEL |
| 464 | StrLenField( |
| 465 | "rta_data", b"", length_from=lambda pkt: pkt.rta_len - 4 |
| 466 | ), |
| 467 | lambda pkt: pkt.rta_type in [0x03], |
| 468 | ), |
| 469 | ], |
| 470 | XStrLenField( |
| 471 | "rta_data", |
| 472 | b"", |
| 473 | length_from=lambda pkt: pkt.rta_len - 4, |
| 474 | ), |
| 475 | ), |
| 476 | align=4, |
| 477 | ), |
| 478 | ] |
| 479 |
nothing calls this directly
no test coverage detected