packetfu 1.1.8 → 1.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. data/README.rdoc +11 -12
  2. data/bench/octets.rb +9 -9
  3. data/examples/100kpackets.rb +13 -12
  4. data/examples/ackscan.rb +17 -16
  5. data/examples/arp.rb +36 -35
  6. data/examples/arphood.rb +37 -36
  7. data/examples/dissect_thinger.rb +7 -6
  8. data/examples/ethernet.rb +1 -0
  9. data/examples/examples.rb +1 -0
  10. data/examples/ifconfig.rb +1 -0
  11. data/examples/new-simple-stats.rb +24 -23
  12. data/examples/packetfu-shell.rb +26 -25
  13. data/examples/simple-sniffer.rb +10 -9
  14. data/examples/simple-stats.rb +24 -23
  15. data/examples/slammer.rb +4 -3
  16. data/lib/packetfu.rb +128 -127
  17. data/lib/packetfu/capture.rb +170 -169
  18. data/lib/packetfu/config.rb +53 -52
  19. data/lib/packetfu/inject.rb +57 -56
  20. data/lib/packetfu/packet.rb +529 -528
  21. data/lib/packetfu/pcap.rb +580 -579
  22. data/lib/packetfu/protos/arp.rb +91 -90
  23. data/lib/packetfu/protos/arp/header.rb +159 -158
  24. data/lib/packetfu/protos/arp/mixin.rb +37 -36
  25. data/lib/packetfu/protos/eth.rb +45 -44
  26. data/lib/packetfu/protos/eth/header.rb +244 -243
  27. data/lib/packetfu/protos/eth/mixin.rb +4 -3
  28. data/lib/packetfu/protos/hsrp.rb +70 -69
  29. data/lib/packetfu/protos/hsrp/header.rb +108 -107
  30. data/lib/packetfu/protos/hsrp/mixin.rb +30 -29
  31. data/lib/packetfu/protos/icmp.rb +72 -71
  32. data/lib/packetfu/protos/icmp/header.rb +83 -82
  33. data/lib/packetfu/protos/icmp/mixin.rb +15 -14
  34. data/lib/packetfu/protos/invalid.rb +50 -49
  35. data/lib/packetfu/protos/ip.rb +70 -69
  36. data/lib/packetfu/protos/ip/header.rb +292 -291
  37. data/lib/packetfu/protos/ip/mixin.rb +41 -40
  38. data/lib/packetfu/protos/ipv6.rb +51 -50
  39. data/lib/packetfu/protos/ipv6/header.rb +189 -188
  40. data/lib/packetfu/protos/ipv6/mixin.rb +30 -29
  41. data/lib/packetfu/protos/lldp.rb +3 -1
  42. data/lib/packetfu/protos/lldp/header.rb +1 -0
  43. data/lib/packetfu/protos/lldp/mixin.rb +1 -0
  44. data/lib/packetfu/protos/tcp.rb +177 -176
  45. data/lib/packetfu/protos/tcp/ecn.rb +36 -35
  46. data/lib/packetfu/protos/tcp/flags.rb +75 -74
  47. data/lib/packetfu/protos/tcp/header.rb +269 -268
  48. data/lib/packetfu/protos/tcp/hlen.rb +33 -32
  49. data/lib/packetfu/protos/tcp/mixin.rb +47 -46
  50. data/lib/packetfu/protos/tcp/option.rb +322 -321
  51. data/lib/packetfu/protos/tcp/options.rb +96 -95
  52. data/lib/packetfu/protos/tcp/reserved.rb +36 -35
  53. data/lib/packetfu/protos/udp.rb +117 -116
  54. data/lib/packetfu/protos/udp/header.rb +92 -91
  55. data/lib/packetfu/protos/udp/mixin.rb +4 -3
  56. data/lib/packetfu/structfu.rb +281 -280
  57. data/lib/packetfu/utils.rb +211 -208
  58. data/lib/packetfu/version.rb +42 -41
  59. data/packetfu.gemspec +1 -1
  60. data/spec/ethpacket_spec.rb +48 -48
  61. data/spec/packet_spec.rb +57 -57
  62. data/spec/packet_subclasses_spec.rb +8 -8
  63. data/spec/packetfu_spec.rb +59 -59
  64. data/spec/structfu_spec.rb +268 -268
  65. data/spec/tcp_spec.rb +75 -75
  66. data/test/all_tests.rb +13 -13
  67. data/test/func_lldp.rb +3 -3
  68. data/test/ptest.rb +2 -2
  69. data/test/test_arp.rb +116 -116
  70. data/test/test_capture.rb +45 -45
  71. data/test/test_eth.rb +68 -68
  72. data/test/test_hsrp.rb +9 -9
  73. data/test/test_icmp.rb +52 -52
  74. data/test/test_inject.rb +18 -18
  75. data/test/test_invalid.rb +16 -16
  76. data/test/test_ip.rb +36 -36
  77. data/test/test_ip6.rb +48 -48
  78. data/test/test_octets.rb +21 -21
  79. data/test/test_packet.rb +154 -154
  80. data/test/test_pcap.rb +170 -170
  81. data/test/test_structfu.rb +97 -97
  82. data/test/test_tcp.rb +320 -320
  83. data/test/test_udp.rb +76 -76
  84. metadata +2 -2
@@ -1,7 +1,8 @@
1
+ # -*- coding: binary -*-
1
2
  module PacketFu
2
- # This Mixin simplifies access to the EthHeaders. Mix this in with your
3
- # packet interface, and it will add methods that essentially delegate to
4
- # the 'eth_header' method (assuming that it is a EthHeader object)
3
+ # This Mixin simplifies access to the EthHeaders. Mix this in with your
4
+ # packet interface, and it will add methods that essentially delegate to
5
+ # the 'eth_header' method (assuming that it is a EthHeader object)
5
6
  module EthHeaderMixin
6
7
  def eth_daddr; self.eth_header.eth_daddr ; end
7
8
  def eth_daddr=(v); self.eth_header.eth_daddr= v; end
@@ -1,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
  require 'packetfu/protos/eth/header'
2
3
  require 'packetfu/protos/eth/mixin'
3
4
 
@@ -11,85 +12,85 @@ require 'packetfu/protos/hsrp/header'
11
12
  require 'packetfu/protos/hsrp/mixin'
12
13
 
13
14
  module PacketFu
14
- # HSRPPacket is used to construct HSRP Packets. They contain an EthHeader, an IPHeader, and a UDPHeader.
15
- #
16
- # == Example
17
- #
18
- # hsrp_pkt.new
19
- # hsrp_pkt.hsrp_opcode = 0
20
- # hsrp_pkt.hsrp_state = 16
21
- # hsrp_pkt.hsrp_priority = 254
22
- # hsrp_pkt.hsrp_group = 1
23
- # hsrp_pkt.hsrp_vip = 10.100.100.254
24
- # hsrp_pkt.recalc
25
- # hsrp_pkt.to_f('/tmp/hsrp.pcap')
26
- #
27
- # == Parameters
28
- #
29
- # :eth
30
- # A pre-generated EthHeader object.
31
- # :ip
32
- # A pre-generated IPHeader object.
33
- # :udp
34
- # A pre-generated UDPHeader object.
35
- # :flavor
36
- # TODO: HSRP packets don't tend have any flavor.
37
- # :config
38
- # A hash of return address details, often the output of Utils.whoami?
39
- class HSRPPacket < Packet
15
+ # HSRPPacket is used to construct HSRP Packets. They contain an EthHeader, an IPHeader, and a UDPHeader.
16
+ #
17
+ # == Example
18
+ #
19
+ # hsrp_pkt.new
20
+ # hsrp_pkt.hsrp_opcode = 0
21
+ # hsrp_pkt.hsrp_state = 16
22
+ # hsrp_pkt.hsrp_priority = 254
23
+ # hsrp_pkt.hsrp_group = 1
24
+ # hsrp_pkt.hsrp_vip = 10.100.100.254
25
+ # hsrp_pkt.recalc
26
+ # hsrp_pkt.to_f('/tmp/hsrp.pcap')
27
+ #
28
+ # == Parameters
29
+ #
30
+ # :eth
31
+ # A pre-generated EthHeader object.
32
+ # :ip
33
+ # A pre-generated IPHeader object.
34
+ # :udp
35
+ # A pre-generated UDPHeader object.
36
+ # :flavor
37
+ # TODO: HSRP packets don't tend have any flavor.
38
+ # :config
39
+ # A hash of return address details, often the output of Utils.whoami?
40
+ class HSRPPacket < Packet
40
41
  include ::PacketFu::EthHeaderMixin
41
42
  include ::PacketFu::IPHeaderMixin
42
43
  include ::PacketFu::UDPHeaderMixin
43
44
  include ::PacketFu::HSRPHeaderMixin
44
45
 
45
- attr_accessor :eth_header, :ip_header, :udp_header, :hsrp_header
46
+ attr_accessor :eth_header, :ip_header, :udp_header, :hsrp_header
46
47
 
47
- def self.can_parse?(str)
48
- return false unless str.size >= 54
49
- return false unless EthPacket.can_parse? str
50
- return false unless IPPacket.can_parse? str
51
- return false unless UDPPacket.can_parse? str
52
- temp_packet = UDPPacket.new
53
- temp_packet.read(str)
54
- if temp_packet.ip_ttl == 1 and [temp_packet.udp_sport,temp_packet.udp_dport] == [1985,1985]
55
- return true
56
- else
57
- return false
58
- end
59
- end
48
+ def self.can_parse?(str)
49
+ return false unless str.size >= 54
50
+ return false unless EthPacket.can_parse? str
51
+ return false unless IPPacket.can_parse? str
52
+ return false unless UDPPacket.can_parse? str
53
+ temp_packet = UDPPacket.new
54
+ temp_packet.read(str)
55
+ if temp_packet.ip_ttl == 1 and [temp_packet.udp_sport,temp_packet.udp_dport] == [1985,1985]
56
+ return true
57
+ else
58
+ return false
59
+ end
60
+ end
60
61
 
61
- def read(str=nil, args={})
62
- raise "Cannot parse `#{str}'" unless self.class.can_parse?(str)
63
- @eth_header.read(str)
64
- super(args)
65
- self
66
- end
62
+ def read(str=nil, args={})
63
+ raise "Cannot parse `#{str}'" unless self.class.can_parse?(str)
64
+ @eth_header.read(str)
65
+ super(args)
66
+ self
67
+ end
67
68
 
68
- def initialize(args={})
69
- @eth_header = EthHeader.new(args).read(args[:eth])
70
- @ip_header = IPHeader.new(args).read(args[:ip])
71
- @ip_header.ip_proto = 0x11
72
- @udp_header = UDPHeader.new(args).read(args[:udp])
73
- @hsrp_header = HSRPHeader.new(args).read(args[:hsrp])
74
- @udp_header.body = @hsrp_header
75
- @ip_header.body = @udp_header
76
- @eth_header.body = @ip_header
77
- @headers = [@eth_header, @ip_header, @udp_header, @hsrp_header]
78
- super
79
- end
69
+ def initialize(args={})
70
+ @eth_header = EthHeader.new(args).read(args[:eth])
71
+ @ip_header = IPHeader.new(args).read(args[:ip])
72
+ @ip_header.ip_proto = 0x11
73
+ @udp_header = UDPHeader.new(args).read(args[:udp])
74
+ @hsrp_header = HSRPHeader.new(args).read(args[:hsrp])
75
+ @udp_header.body = @hsrp_header
76
+ @ip_header.body = @udp_header
77
+ @eth_header.body = @ip_header
78
+ @headers = [@eth_header, @ip_header, @udp_header, @hsrp_header]
79
+ super
80
+ end
80
81
 
81
- # Peek provides summary data on packet contents.
82
- def peek_format
83
- peek_data = ["UH "]
84
- peek_data << "%-5d" % self.to_s.size
85
- peek_data << "%-16s" % self.hsrp_addr
86
- peek_data << "%-4d" % self.hsrp_group
87
- peek_data << "%-35s" % self.hsrp_password_readable
88
- peek_data << "%-15s" % self.ip_saddr
89
- peek_data.join
90
- end
82
+ # Peek provides summary data on packet contents.
83
+ def peek_format
84
+ peek_data = ["UH "]
85
+ peek_data << "%-5d" % self.to_s.size
86
+ peek_data << "%-16s" % self.hsrp_addr
87
+ peek_data << "%-4d" % self.hsrp_group
88
+ peek_data << "%-35s" % self.hsrp_password_readable
89
+ peek_data << "%-15s" % self.ip_saddr
90
+ peek_data.join
91
+ end
91
92
 
92
- end
93
+ end
93
94
 
94
95
  end
95
96
 
@@ -1,120 +1,121 @@
1
+ # -*- coding: binary -*-
1
2
  module PacketFu
2
- # HSRPHeader is a complete HSRP struct, used in HSRPPacket. HSRP is typically used for
3
- # fault-tolerant default gateway in IP routing environment.
4
- #
5
- # For more on HSRP packets, see http://www.networksorcery.com/enp/protocol/hsrp.htm
6
- #
7
- # Submitted by fropert@packetfault.org. Thanks, Francois!
8
- #
9
- # ==== Header Definition
10
- #
11
- # Int8 :hsrp_version Default: 0 # Version
12
- # Int8 :hsrp_opcode # Opcode
13
- # Int8 :hsrp_state # State
14
- # Int8 :hsrp_hellotime Default: 3 # Hello Time
15
- # Int8 :hsrp_holdtime Default: 10 # Hold Time
16
- # Int8 :hsrp_priority # Priority
17
- # Int8 :hsrp_group # Group
18
- # Int8 :hsrp_reserved Default: 0 # Reserved
19
- # String :hsrp_password # Authentication Data
20
- # Octets :hsrp_vip # Virtual IP Address
21
- # String :body
22
- class HSRPHeader < Struct.new(:hsrp_version, :hsrp_opcode, :hsrp_state,
23
- :hsrp_hellotime, :hsrp_holdtime,
24
- :hsrp_priority, :hsrp_group,
25
- :hsrp_reserved, :hsrp_password,
26
- :hsrp_vip, :body)
3
+ # HSRPHeader is a complete HSRP struct, used in HSRPPacket. HSRP is typically used for
4
+ # fault-tolerant default gateway in IP routing environment.
5
+ #
6
+ # For more on HSRP packets, see http://www.networksorcery.com/enp/protocol/hsrp.htm
7
+ #
8
+ # Submitted by fropert@packetfault.org. Thanks, Francois!
9
+ #
10
+ # ==== Header Definition
11
+ #
12
+ # Int8 :hsrp_version Default: 0 # Version
13
+ # Int8 :hsrp_opcode # Opcode
14
+ # Int8 :hsrp_state # State
15
+ # Int8 :hsrp_hellotime Default: 3 # Hello Time
16
+ # Int8 :hsrp_holdtime Default: 10 # Hold Time
17
+ # Int8 :hsrp_priority # Priority
18
+ # Int8 :hsrp_group # Group
19
+ # Int8 :hsrp_reserved Default: 0 # Reserved
20
+ # String :hsrp_password # Authentication Data
21
+ # Octets :hsrp_vip # Virtual IP Address
22
+ # String :body
23
+ class HSRPHeader < Struct.new(:hsrp_version, :hsrp_opcode, :hsrp_state,
24
+ :hsrp_hellotime, :hsrp_holdtime,
25
+ :hsrp_priority, :hsrp_group,
26
+ :hsrp_reserved, :hsrp_password,
27
+ :hsrp_vip, :body)
27
28
 
28
- include StructFu
29
+ include StructFu
29
30
 
30
- def initialize(args={})
31
- super(
32
- Int8.new(args[:hsrp_version] || 0),
33
- Int8.new(args[:hsrp_opcode]),
34
- Int8.new(args[:hsrp_state]),
35
- Int8.new(args[:hsrp_hellotime] || 3),
36
- Int8.new(args[:hsrp_holdtime] || 10),
37
- Int8.new(args[:hsrp_priority]),
38
- Int8.new(args[:hsrp_group]),
39
- Int8.new(args[:hsrp_reserved] || 0),
40
- StructFu::String.new.read(args[:hsrp_password] || "cisco\x00\x00\x00"),
41
- Octets.new.read(args[:hsrp_vip] || ("\x00" * 4)),
42
- StructFu::String.new.read(args[:body])
43
- )
44
- end
31
+ def initialize(args={})
32
+ super(
33
+ Int8.new(args[:hsrp_version] || 0),
34
+ Int8.new(args[:hsrp_opcode]),
35
+ Int8.new(args[:hsrp_state]),
36
+ Int8.new(args[:hsrp_hellotime] || 3),
37
+ Int8.new(args[:hsrp_holdtime] || 10),
38
+ Int8.new(args[:hsrp_priority]),
39
+ Int8.new(args[:hsrp_group]),
40
+ Int8.new(args[:hsrp_reserved] || 0),
41
+ StructFu::String.new.read(args[:hsrp_password] || "cisco\x00\x00\x00"),
42
+ Octets.new.read(args[:hsrp_vip] || ("\x00" * 4)),
43
+ StructFu::String.new.read(args[:body])
44
+ )
45
+ end
45
46
 
46
- # Returns the object in string form.
47
- def to_s
48
- self.to_a.map {|x| x.to_s}.join
49
- end
47
+ # Returns the object in string form.
48
+ def to_s
49
+ self.to_a.map {|x| x.to_s}.join
50
+ end
50
51
 
51
- # Reads a string to populate the object.
52
- def read(str)
53
- force_binary(str)
54
- return self if str.nil?
55
- self[:hsrp_version].read(str[0,1])
56
- self[:hsrp_opcode].read(str[1,1])
57
- self[:hsrp_state].read(str[2,1])
58
- self[:hsrp_hellotime].read(str[3,1])
59
- self[:hsrp_holdtime].read(str[4,1])
60
- self[:hsrp_priority].read(str[5,1])
61
- self[:hsrp_group].read(str[6,1])
62
- self[:hsrp_reserved].read(str[7,1])
63
- self[:hsrp_password].read(str[8,8])
64
- self[:hsrp_vip].read(str[16,4])
65
- self[:body].read(str[20,str.size]) if str.size > 20
66
- self
67
- end
52
+ # Reads a string to populate the object.
53
+ def read(str)
54
+ force_binary(str)
55
+ return self if str.nil?
56
+ self[:hsrp_version].read(str[0,1])
57
+ self[:hsrp_opcode].read(str[1,1])
58
+ self[:hsrp_state].read(str[2,1])
59
+ self[:hsrp_hellotime].read(str[3,1])
60
+ self[:hsrp_holdtime].read(str[4,1])
61
+ self[:hsrp_priority].read(str[5,1])
62
+ self[:hsrp_group].read(str[6,1])
63
+ self[:hsrp_reserved].read(str[7,1])
64
+ self[:hsrp_password].read(str[8,8])
65
+ self[:hsrp_vip].read(str[16,4])
66
+ self[:body].read(str[20,str.size]) if str.size > 20
67
+ self
68
+ end
68
69
 
69
- # Setter for the type.
70
- def hsrp_version=(i); typecast i; end
71
- # Getter for the type.
72
- def hsrp_version; self[:hsrp_version].to_i; end
73
- # Setter for the type.
74
- def hsrp_opcode=(i); typecast i; end
75
- # Getter for the type.
76
- def hsrp_opcode; self[:hsrp_opcode].to_i; end
77
- # Setter for the type.
78
- def hsrp_state=(i); typecast i; end
79
- # Getter for the type.
80
- def hsrp_state; self[:hsrp_state].to_i; end
81
- # Setter for the type.
82
- def hsrp_hellotime=(i); typecast i; end
83
- # Getter for the type.
84
- def hsrp_hellotime; self[:hsrp_hellotime].to_i; end
85
- # Setter for the type.
86
- def hsrp_holdtime=(i); typecast i; end
87
- # Getter for the type.
88
- def hsrp_holdtime; self[:hsrp_holdtime].to_i; end
89
- # Setter for the type.
90
- def hsrp_priority=(i); typecast i; end
91
- # Getter for the type.
92
- def hsrp_priority; self[:hsrp_priority].to_i; end
93
- # Setter for the type.
94
- def hsrp_group=(i); typecast i; end
95
- # Getter for the type.
96
- def hsrp_group; self[:hsrp_group].to_i; end
97
- # Setter for the type.
98
- def hsrp_reserved=(i); typecast i; end
99
- # Getter for the type.
100
- def hsrp_reserved; self[:hsrp_reserved].to_i; end
70
+ # Setter for the type.
71
+ def hsrp_version=(i); typecast i; end
72
+ # Getter for the type.
73
+ def hsrp_version; self[:hsrp_version].to_i; end
74
+ # Setter for the type.
75
+ def hsrp_opcode=(i); typecast i; end
76
+ # Getter for the type.
77
+ def hsrp_opcode; self[:hsrp_opcode].to_i; end
78
+ # Setter for the type.
79
+ def hsrp_state=(i); typecast i; end
80
+ # Getter for the type.
81
+ def hsrp_state; self[:hsrp_state].to_i; end
82
+ # Setter for the type.
83
+ def hsrp_hellotime=(i); typecast i; end
84
+ # Getter for the type.
85
+ def hsrp_hellotime; self[:hsrp_hellotime].to_i; end
86
+ # Setter for the type.
87
+ def hsrp_holdtime=(i); typecast i; end
88
+ # Getter for the type.
89
+ def hsrp_holdtime; self[:hsrp_holdtime].to_i; end
90
+ # Setter for the type.
91
+ def hsrp_priority=(i); typecast i; end
92
+ # Getter for the type.
93
+ def hsrp_priority; self[:hsrp_priority].to_i; end
94
+ # Setter for the type.
95
+ def hsrp_group=(i); typecast i; end
96
+ # Getter for the type.
97
+ def hsrp_group; self[:hsrp_group].to_i; end
98
+ # Setter for the type.
99
+ def hsrp_reserved=(i); typecast i; end
100
+ # Getter for the type.
101
+ def hsrp_reserved; self[:hsrp_reserved].to_i; end
101
102
 
102
- def hsrp_addr=(addr)
103
- self[:hsrp_vip].read_quad(addr)
104
- end
103
+ def hsrp_addr=(addr)
104
+ self[:hsrp_vip].read_quad(addr)
105
+ end
105
106
 
106
- # Returns a more readable IP source address.
107
- def hsrp_addr
108
- self[:hsrp_vip].to_x
109
- end
107
+ # Returns a more readable IP source address.
108
+ def hsrp_addr
109
+ self[:hsrp_vip].to_x
110
+ end
110
111
 
111
- # Readability aliases
112
+ # Readability aliases
112
113
 
113
- alias :hsrp_vip_readable :hsrp_addr
114
+ alias :hsrp_vip_readable :hsrp_addr
114
115
 
115
- def hsrp_password_readable
116
- hsrp_password.to_s.inspect
117
- end
116
+ def hsrp_password_readable
117
+ hsrp_password.to_s.inspect
118
+ end
118
119
 
119
- end
120
+ end
120
121
  end
@@ -1,31 +1,32 @@
1
+ # -*- coding: binary -*-
1
2
  module PacketFu
2
- # This Mixin simplifies access to the HSRPHeaders. Mix this in with your
3
- # packet interface, and it will add methods that essentially delegate to
4
- # the 'hsrp_header' method (assuming that it is a HSRPHeader object)
5
- module HSRPHeaderMixin
6
- def hsrp_version=(v); self.hsrp_header.hsrp_version= v; end
7
- def hsrp_version; self.hsrp_header.hsrp_version; end
8
- def hsrp_opcode=(v); self.hsrp_header.hsrp_opcode= v; end
9
- def hsrp_opcode; self.hsrp_header.hsrp_opcode; end
10
- def hsrp_state=(v); self.hsrp_header.hsrp_state= v; end
11
- def hsrp_state; self.hsrp_header.hsrp_state; end
12
- def hsrp_hellotime=(v); self.hsrp_header.hsrp_hellotime= v; end
13
- def hsrp_hellotime; self.hsrp_header.hsrp_hellotime; end
14
- def hsrp_holdtime=(v); self.hsrp_header.hsrp_holdtime= v; end
15
- def hsrp_holdtime; self.hsrp_header.hsrp_holdtime; end
16
- def hsrp_priority=(v); self.hsrp_header.hsrp_priority= v; end
17
- def hsrp_priority; self.hsrp_header.hsrp_priority; end
18
- def hsrp_group=(v); self.hsrp_header.hsrp_group= v; end
19
- def hsrp_group; self.hsrp_header.hsrp_group; end
20
- def hsrp_reserved=(v); self.hsrp_header.hsrp_reserved= v; end
21
- def hsrp_reserved; self.hsrp_header.hsrp_reserved; end
22
- def hsrp_addr=(v); self.hsrp_header.hsrp_addr= v; end
23
- def hsrp_addr; self.hsrp_header.hsrp_addr; end
24
- def hsrp_vip_readable; self.hsrp_header.hsrp_vip_readable; end
25
- def hsrp_password_readable; self.hsrp_header.hsrp_password_readable; end
26
- def hsrp_password; self.hsrp_header.hsrp_password; end
27
- def hsrp_password=(v); self.hsrp_header.hsrp_password= v; end
28
- def hsrp_vip; self.hsrp_header.hsrp_vip; end
29
- def hsrp_vip=(v); self.hsrp_header.hsrp_vip= v; end
30
- end
3
+ # This Mixin simplifies access to the HSRPHeaders. Mix this in with your
4
+ # packet interface, and it will add methods that essentially delegate to
5
+ # the 'hsrp_header' method (assuming that it is a HSRPHeader object)
6
+ module HSRPHeaderMixin
7
+ def hsrp_version=(v); self.hsrp_header.hsrp_version= v; end
8
+ def hsrp_version; self.hsrp_header.hsrp_version; end
9
+ def hsrp_opcode=(v); self.hsrp_header.hsrp_opcode= v; end
10
+ def hsrp_opcode; self.hsrp_header.hsrp_opcode; end
11
+ def hsrp_state=(v); self.hsrp_header.hsrp_state= v; end
12
+ def hsrp_state; self.hsrp_header.hsrp_state; end
13
+ def hsrp_hellotime=(v); self.hsrp_header.hsrp_hellotime= v; end
14
+ def hsrp_hellotime; self.hsrp_header.hsrp_hellotime; end
15
+ def hsrp_holdtime=(v); self.hsrp_header.hsrp_holdtime= v; end
16
+ def hsrp_holdtime; self.hsrp_header.hsrp_holdtime; end
17
+ def hsrp_priority=(v); self.hsrp_header.hsrp_priority= v; end
18
+ def hsrp_priority; self.hsrp_header.hsrp_priority; end
19
+ def hsrp_group=(v); self.hsrp_header.hsrp_group= v; end
20
+ def hsrp_group; self.hsrp_header.hsrp_group; end
21
+ def hsrp_reserved=(v); self.hsrp_header.hsrp_reserved= v; end
22
+ def hsrp_reserved; self.hsrp_header.hsrp_reserved; end
23
+ def hsrp_addr=(v); self.hsrp_header.hsrp_addr= v; end
24
+ def hsrp_addr; self.hsrp_header.hsrp_addr; end
25
+ def hsrp_vip_readable; self.hsrp_header.hsrp_vip_readable; end
26
+ def hsrp_password_readable; self.hsrp_header.hsrp_password_readable; end
27
+ def hsrp_password; self.hsrp_header.hsrp_password; end
28
+ def hsrp_password=(v); self.hsrp_header.hsrp_password= v; end
29
+ def hsrp_vip; self.hsrp_header.hsrp_vip; end
30
+ def hsrp_vip=(v); self.hsrp_header.hsrp_vip= v; end
31
+ end
31
32
  end