luci-mod-network: add ipproto property to routes
authorPaul Donald <newtwen+github@gmail.com>
Fri, 29 Nov 2024 00:32:16 +0000 (01:32 +0100)
committerPaul Donald <newtwen+github@gmail.com>
Thu, 12 Dec 2024 20:36:10 +0000 (21:36 +0100)
Signed-off-by: Paul Donald <newtwen+github@gmail.com>
modules/luci-mod-network/htdocs/luci-static/resources/tools/network.js
modules/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js

index 76cb7d774913bd8617ad7e89b0d3ea131b90df35..ab297f9576e660c3be14e661dba1c0ee23567489 100644 (file)
@@ -364,6 +364,64 @@ var cbiTagValue = form.Value.extend({
 });
 
 return baseclass.extend({
+
+       protocols: [ // name, proto number, description
+               { n: 'hopopt', i: 0, d: 'HOPOPT' },
+               { n: 'icmp', i: 1, d: 'ICMP' },
+               { n: 'igmp', i: 2, d: 'IGMP' },
+               { n: 'ggp', i: 3, d: 'GGP' },
+               { n: 'ipencap', i: 4, d: 'IP-ENCAP' },
+               { n: 'st', i: 5, d: 'ST' },
+               { n: 'tcp', i: 6, d: 'TCP' },
+               { n: 'egp', i: 8, d: 'EGP' },
+               { n: 'igp', i: 9, d: 'IGP' },
+               { n: 'pup', i: 12, d: 'PUP' },
+               { n: 'udp', i: 17, d: 'UDP' },
+               { n: 'hmp', i: 20, d: 'HMP' },
+               { n: 'xns-idp', i: 22, d: 'XNS-IDP' },
+               { n: 'rdp', i: 27, d: 'RDP' },
+               { n: 'iso-tp4', i: 29, d: 'ISO-TP4' },
+               { n: 'dccp', i: 33, d: 'DCCP' },
+               { n: 'xtp', i: 36, d: 'XTP' },
+               { n: 'ddp', i: 37, d: 'DDP' },
+               { n: 'idpr-cmtp', i: 38, d: 'IDPR-CMTP' },
+               { n: 'ipv6', i: 41, d: 'IPv6' },
+               { n: 'ipv6-route', i: 43, d: 'IPv6-Route' },
+               { n: 'ipv6-frag', i: 44, d: 'IPv6-Frag' },
+               { n: 'idrp', i: 45, d: 'IDRP' },
+               { n: 'rsvp', i: 46, d: 'RSVP' },
+               { n: 'gre', i: 47, d: 'GRE' },
+               { n: 'esp', i: 50, d: 'IPSEC-ESP' },
+               { n: 'ah', i: 51, d: 'IPSEC-AH' },
+               { n: 'skip', i: 57, d: 'SKIP' },
+               { n: 'icmpv6', i: 58, d: 'IPv6-ICMP' },
+               { n: 'ipv6-nonxt', i: 59, d: 'IPv6-NoNxt' },
+               { n: 'ipv6-opts', i: 60, d: 'IPv6-Opts' },
+               { n: 'rspf', i: 73, d: 'CPHB' },
+               { n: 'vmtp', i: 81, d: 'VMTP' },
+               { n: 'eigrp', i: 88, d: 'EIGRP' },
+               { n: 'ospf', i: 89, d: 'OSPFIGP' },
+               { n: 'ax.25', i: 93, d: 'AX.25' },
+               { n: 'ipip', i: 94, d: 'IPIP' },
+               { n: 'etherip', i: 97, d: 'ETHERIP' },
+               { n: 'encap', i: 98, d: 'ENCAP' },
+               { n: 'pim', i: 103, d: 'PIM' },
+               { n: 'ipcomp', i: 108, d: 'IPCOMP' },
+               { n: 'vrrp', i: 112, d: 'VRRP' },
+               { n: 'l2tp', i: 115, d: 'L2TP' },
+               { n: 'isis', i: 124, d: 'ISIS' },
+               { n: 'sctp', i: 132, d: 'SCTP' },
+               { n: 'fc', i: 133, d: 'FC' },
+               { n: 'mobility-header', i: 135, d: 'Mobility-Header' },
+               { n: 'udplite', i: 136, d: 'UDPLite' },
+               { n: 'mpls-in-ip', i: 137, d: 'MPLS-in-IP' },
+               { n: 'manet', i: 138, d: 'MANET' },
+               { n: 'hip', i: 139, d: 'HIP' },
+               { n: 'shim6', i: 140, d: 'Shim6' },
+               { n: 'wesp', i: 141, d: 'WESP' },
+               { n: 'rohc', i: 142, d: 'ROHC' },
+       ],
+
        replaceOption: function(s, tabName, optionClass, optionName, optionTitle, optionDescription) {
                var o = s.getOption(optionName);
 
index d5d48246504cf0dc2c69719df2788585fae13e00..312b53007accb1fbbbfe59c76a1ef47e0642f0d3 100644 (file)
@@ -5,6 +5,7 @@
 'require form';
 'require network';
 'require tools.widgets as widgets';
+'require tools.network as tn';
 
 return view.extend({
        load: function() {
@@ -160,6 +161,12 @@ return view.extend({
                                return this.cfgvalue(section_id) || E('em', _('any'));
                        };
 
+                       o = s.taboption('general', form.Value, 'ipproto', _('IP Protocol'), _('Match traffic IP protocol type'));
+                       o.datatype = 'range(0,255)';
+                       tn.protocols.forEach(function(p) {
+                               o.value(p.i, p.d);
+                       });
+
                        o = s.taboption('general', widgets.NetworkSelect, 'out', _('Outgoing interface'), _('Match traffic destined to this interface'));
                        o.loopback = true;
                        o.nocreate = true;