summaryrefslogtreecommitdiff
path: root/sys/src/9/ip
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2022-03-14 18:45:27 +0000
committercinap_lenrek <cinap_lenrek@felloff.net>2022-03-14 18:45:27 +0000
commitca313087c1715a0331a58c01ad104632d366f057 (patch)
treee334e4c4ea6d10bd911d5e88b000cd4bc48e41f9 /sys/src/9/ip
parentd4e89fe76a24ab08aae50f0918cf3e65efbc779b (diff)
ip(3): use flags instead of tag for 8 column route add/remove
This avoids ipconfig having to explicitely specify the tag when we want to set route type, as the tag can be provided implicitely thru the "tag" command.
Diffstat (limited to 'sys/src/9/ip')
-rw-r--r--sys/src/9/ip/ipifc.c1
-rw-r--r--sys/src/9/ip/iproute.c26
2 files changed, 13 insertions, 14 deletions
diff --git a/sys/src/9/ip/ipifc.c b/sys/src/9/ip/ipifc.c
index 6e03a6257..653fd1117 100644
--- a/sys/src/9/ip/ipifc.c
+++ b/sys/src/9/ip/ipifc.c
@@ -909,7 +909,6 @@ addselfcache(Fs *f, Ipifc *ifc, Iplifc *lifc, uchar *a, int type)
int h;
type |= (lifc->type & Rv4);
- type &= ~Rtrans;
qlock(f->self);
if(waserror()){
diff --git a/sys/src/9/ip/iproute.c b/sys/src/9/ip/iproute.c
index 4e3d57e44..c84a36070 100644
--- a/sys/src/9/ip/iproute.c
+++ b/sys/src/9/ip/iproute.c
@@ -1035,14 +1035,14 @@ routeread(Fs *f, char *p, ulong offset, int n)
* 5 add addr mask gate ifc
* 6 add addr mask gate src smask
* 7 add addr mask gate ifc src smask
- * 8 add addr mask gate tag ifc src smask
+ * 8 add addr mask gate type ifc src smask
* 9 add addr mask gate type tag ifc src smask
* 3 remove addr mask
* 4 remove addr mask gate
* 5 remove addr mask src smask
* 6 remove addr mask gate src smask
* 7 remove addr mask gate ifc src smask
- * 8 remove addr mask gate tag ifc src smask
+ * 8 remove addr mask gate type ifc src smask
* 9 remove addr mask gate type tag ifc src smask
*/
static Route
@@ -1064,6 +1064,7 @@ parseroute(Fs *f, char **argv, int argc)
if(argc < 3)
error(Ebadctl);
+
if(parseipandmask(addr, mask, argv[1], argv[2]) == -1)
error(Ebadip);
@@ -1073,29 +1074,28 @@ parseroute(Fs *f, char **argv, int argc)
if(parseip(gate, argv[3]) == -1)
error(Ebadip);
}
+
if(argc > 4 && (strcmp(argv[0], "add") != 0 || argc != 5)){
if(parseipandmask(src, smask, argv[argc-2], argv[argc-1]) == -1)
error(Ebadip);
}
+
if(argc == 5 && strcmp(argv[0], "add") == 0)
ifc = findipifcstr(f, argv[4]);
if(argc > 6)
ifc = findipifcstr(f, argv[argc-3]);
- if(argc > 7)
- tag = argv[argc-4];
- if(argc > 8){
- if((type = parseroutetype(argv[argc-5])) < 0)
- error(Ebadctl);
- } else {
- if(isv4(addr))
- type |= Rv4;
- }
+
+ if(argc > 7 && (type = parseroutetype(argv[4])) < 0)
+ error(Ebadctl);
+ if(isv4(addr))
+ type |= Rv4;
+
+ if(argc > 8)
+ tag = argv[5];
if(argc > 9)
error(Ebadctl);
if(type & Rv4){
- if(!isv4(addr))
- error(Ebadip);
if(ipcmp(smask, IPnoaddr) != 0 && !isv4(src))
error(Ebadip);
if(ipcmp(gate, IPnoaddr) != 0 && !isv4(gate))