| 225 | |
| 226 | |
| 227 | class SourceMACField(MACField): |
| 228 | __slots__ = ["getif"] |
| 229 | |
| 230 | def __init__(self, name, getif=None): |
| 231 | # type: (str, Optional[Any]) -> None |
| 232 | MACField.__init__(self, name, None) |
| 233 | self.getif = (lambda pkt: pkt.route()[0]) if getif is None else getif |
| 234 | |
| 235 | def i2h(self, pkt, x): |
| 236 | # type: (Optional[Packet], Optional[str]) -> str |
| 237 | if x is None: |
| 238 | iff = self.getif(pkt) |
| 239 | if iff: |
| 240 | x = resolve_iface(iff).mac |
| 241 | if x is None: |
| 242 | x = "00:00:00:00:00:00" |
| 243 | return super(SourceMACField, self).i2h(pkt, x) |
| 244 | |
| 245 | def i2m(self, pkt, x): |
| 246 | # type: (Optional[Packet], Optional[Any]) -> bytes |
| 247 | return super(SourceMACField, self).i2m(pkt, self.i2h(pkt, x)) |
| 248 | |
| 249 | |
| 250 | # Layers |
no outgoing calls
no test coverage detected
searching dependent graphs…