Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/tests/sys/netinet6/ra.py
103480 views
1
#
2
# SPDX-License-Identifier: BSD-2-Clause
3
#
4
# Copyright (c) 2024 Klara, Inc.
5
#
6
7
import argparse
8
import scapy.all as sp
9
import sys
10
11
12
#
13
# Emit a router advertisement with the specified prefix.
14
#
15
def main():
16
parser = argparse.ArgumentParser("ra.py",
17
description="Emits Router Advertisement packets")
18
parser.add_argument('--sendif', nargs=1, required=True,
19
help='The interface through which the packet will be sent')
20
parser.add_argument('--src', nargs=1, required=True,
21
help='The source IP address')
22
parser.add_argument('--dst', nargs=1, required=True,
23
help='The destination IP address')
24
parser.add_argument('--prefix', nargs=1, required=True,
25
help='The prefix to be advertised')
26
parser.add_argument('--prefixlen', nargs=1, required=True, type=int,
27
help='The prefix length to be advertised')
28
parser.add_argument('--validlifetime', nargs=1, required=False,
29
type=int, default=4294967295,
30
help='The valid lifetime of the prefix')
31
parser.add_argument('--preferredlifetime', nargs=1, required=False,
32
type=int, default=4294967295,
33
help='The preferred lifetime of the prefix')
34
35
args = parser.parse_args()
36
pkt = sp.Ether() / \
37
sp.IPv6(src=args.src, dst=args.dst) / \
38
sp.ICMPv6ND_RA(chlim=64) / \
39
sp.ICMPv6NDOptPrefixInfo(prefix=args.prefix,
40
prefixlen=args.prefixlen,
41
validlifetime=args.validlifetime,
42
preferredlifetime=args.preferredlifetime)
43
44
sp.sendp(pkt, iface=args.sendif[0], verbose=False)
45
sys.exit(0)
46
47
48
if __name__ == '__main__':
49
main()
50
51