View | Details | Raw Unified | Return to bug 2016
Collapse All | Expand All

(-)a/examples/ipv6/radvd.cc (-1 / +6 lines)
 Lines 115-124    Link Here 
115
115
116
  /* radvd configuration */
116
  /* radvd configuration */
117
  RadvdHelper radvdHelper;
117
  RadvdHelper radvdHelper;
118
118
  /* R interface (n0 - R) */
119
  /* R interface (n0 - R) */
119
  radvdHelper.AddAnnouncedPrefix(iic1.GetInterfaceIndex (1), Ipv6Address("2001:1::0"), 64);
120
  /* n0 will receive unsolicited (periodic) RA */
121
  radvdHelper.AddAnnouncedPrefix (iic1.GetInterfaceIndex (1), Ipv6Address("2001:1::0"), 64);
122
120
  /* R interface (R - n1) */
123
  /* R interface (R - n1) */
124
  /* n1 will have to use RS, as RA are not sent automatically */
121
  radvdHelper.AddAnnouncedPrefix(iic2.GetInterfaceIndex (1), Ipv6Address("2001:2::0"), 64);
125
  radvdHelper.AddAnnouncedPrefix(iic2.GetInterfaceIndex (1), Ipv6Address("2001:2::0"), 64);
126
  radvdHelper.GetRadvdInterface (iic2.GetInterfaceIndex (1))->SetSendAdvert (false);
122
127
123
  ApplicationContainer radvdApps = radvdHelper.Install (r);
128
  ApplicationContainer radvdApps = radvdHelper.Install (r);
124
  radvdApps.Start (Seconds (1.0));
129
  radvdApps.Start (Seconds (1.0));
(-)a/src/applications/bindings/modulegen__gcc_ILP32.py (-10 / +28 lines)
 Lines 4193-4199    Link Here 
4193
    return
4193
    return
4194
4194
4195
def register_Ns3Int64x64_t_methods(root_module, cls):
4195
def register_Ns3Int64x64_t_methods(root_module, cls):
4196
    cls.add_binary_comparison_operator('<=')
4197
    cls.add_binary_comparison_operator('!=')
4196
    cls.add_binary_comparison_operator('!=')
4198
    cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', u'right'))
4197
    cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', u'right'))
4199
    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
4198
    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
 Lines 4207-4212    Link Here 
4207
    cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', u'right'))
4206
    cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', u'right'))
4208
    cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', u'right'))
4207
    cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', u'right'))
4209
    cls.add_output_stream_operator()
4208
    cls.add_output_stream_operator()
4209
    cls.add_binary_comparison_operator('<=')
4210
    cls.add_binary_comparison_operator('==')
4210
    cls.add_binary_comparison_operator('==')
4211
    cls.add_binary_comparison_operator('>=')
4211
    cls.add_binary_comparison_operator('>=')
4212
    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t() [constructor]
4212
    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t() [constructor]
 Lines 5913-5919    Link Here 
5913
    return
5913
    return
5914
5914
5915
def register_Ns3Time_methods(root_module, cls):
5915
def register_Ns3Time_methods(root_module, cls):
5916
    cls.add_binary_comparison_operator('<=')
5917
    cls.add_binary_comparison_operator('!=')
5916
    cls.add_binary_comparison_operator('!=')
5918
    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', u'right'))
5917
    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', u'right'))
5919
    cls.add_binary_numeric_operator('*', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
5918
    cls.add_binary_numeric_operator('*', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
 Lines 5924-5929    Link Here 
5924
    cls.add_binary_comparison_operator('>')
5923
    cls.add_binary_comparison_operator('>')
5925
    cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', u'right'))
5924
    cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', u'right'))
5926
    cls.add_output_stream_operator()
5925
    cls.add_output_stream_operator()
5926
    cls.add_binary_comparison_operator('<=')
5927
    cls.add_binary_comparison_operator('==')
5927
    cls.add_binary_comparison_operator('==')
5928
    cls.add_binary_comparison_operator('>=')
5928
    cls.add_binary_comparison_operator('>=')
5929
    ## nstime.h (module 'core'): ns3::Time::Time() [constructor]
5929
    ## nstime.h (module 'core'): ns3::Time::Time() [constructor]
 Lines 7000-7013    Link Here 
7000
    cls.add_constructor([param('ns3::EnumChecker const &', 'arg0')])
7000
    cls.add_constructor([param('ns3::EnumChecker const &', 'arg0')])
7001
    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker() [constructor]
7001
    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker() [constructor]
7002
    cls.add_constructor([])
7002
    cls.add_constructor([])
7003
    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int v, std::string name) [member function]
7003
    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, std::string name) [member function]
7004
    cls.add_method('Add', 
7004
    cls.add_method('Add', 
7005
                   'void', 
7005
                   'void', 
7006
                   [param('int', 'v'), param('std::string', 'name')])
7006
                   [param('int', 'value'), param('std::string', 'name')])
7007
    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int v, std::string name) [member function]
7007
    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
7008
    cls.add_method('AddDefault', 
7008
    cls.add_method('AddDefault', 
7009
                   'void', 
7009
                   'void', 
7010
                   [param('int', 'v'), param('std::string', 'name')])
7010
                   [param('int', 'value'), param('std::string', 'name')])
7011
    ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
7011
    ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
7012
    cls.add_method('Check', 
7012
    cls.add_method('Check', 
7013
                   'bool', 
7013
                   'bool', 
 Lines 7045-7052    Link Here 
7045
    cls.add_constructor([param('ns3::EnumValue const &', 'arg0')])
7045
    cls.add_constructor([param('ns3::EnumValue const &', 'arg0')])
7046
    ## enum.h (module 'core'): ns3::EnumValue::EnumValue() [constructor]
7046
    ## enum.h (module 'core'): ns3::EnumValue::EnumValue() [constructor]
7047
    cls.add_constructor([])
7047
    cls.add_constructor([])
7048
    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(int v) [constructor]
7048
    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(int value) [constructor]
7049
    cls.add_constructor([param('int', 'v')])
7049
    cls.add_constructor([param('int', 'value')])
7050
    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
7050
    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
7051
    cls.add_method('Copy', 
7051
    cls.add_method('Copy', 
7052
                   'ns3::Ptr< ns3::AttributeValue >', 
7052
                   'ns3::Ptr< ns3::AttributeValue >', 
 Lines 7067-7076    Link Here 
7067
                   'std::string', 
7067
                   'std::string', 
7068
                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
7068
                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
7069
                   is_const=True, is_virtual=True)
7069
                   is_const=True, is_virtual=True)
7070
    ## enum.h (module 'core'): void ns3::EnumValue::Set(int v) [member function]
7070
    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
7071
    cls.add_method('Set', 
7071
    cls.add_method('Set', 
7072
                   'void', 
7072
                   'void', 
7073
                   [param('int', 'v')])
7073
                   [param('int', 'value')])
7074
    return
7074
    return
7075
7075
7076
def register_Ns3ErlangRandomVariable_methods(root_module, cls):
7076
def register_Ns3ErlangRandomVariable_methods(root_module, cls):
 Lines 9869-9876    Link Here 
9869
                   'ns3::TypeId', 
9869
                   'ns3::TypeId', 
9870
                   [], 
9870
                   [], 
9871
                   is_static=True)
9871
                   is_static=True)
9872
    ## radvd.h (module 'applications'): ns3::Radvd::MAX_INITIAL_RTR_ADVERTISEMENTS [variable]
9873
    cls.add_static_attribute('MAX_INITIAL_RTR_ADVERTISEMENTS', 'uint32_t const', is_const=True)
9874
    ## radvd.h (module 'applications'): ns3::Radvd::MAX_INITIAL_RTR_ADVERT_INTERVAL [variable]
9875
    cls.add_static_attribute('MAX_INITIAL_RTR_ADVERT_INTERVAL', 'uint32_t const', is_const=True)
9872
    ## radvd.h (module 'applications'): ns3::Radvd::MAX_RA_DELAY_TIME [variable]
9876
    ## radvd.h (module 'applications'): ns3::Radvd::MAX_RA_DELAY_TIME [variable]
9873
    cls.add_static_attribute('MAX_RA_DELAY_TIME', 'uint32_t const', is_const=True)
9877
    cls.add_static_attribute('MAX_RA_DELAY_TIME', 'uint32_t const', is_const=True)
9878
    ## radvd.h (module 'applications'): ns3::Radvd::MIN_DELAY_BETWEEN_RAS [variable]
9879
    cls.add_static_attribute('MIN_DELAY_BETWEEN_RAS', 'uint32_t const', is_const=True)
9874
    ## radvd.h (module 'applications'): void ns3::Radvd::DoDispose() [member function]
9880
    ## radvd.h (module 'applications'): void ns3::Radvd::DoDispose() [member function]
9875
    cls.add_method('DoDispose', 
9881
    cls.add_method('DoDispose', 
9876
                   'void', 
9882
                   'void', 
 Lines 9929-9934    Link Here 
9929
                   'uint32_t', 
9935
                   'uint32_t', 
9930
                   [], 
9936
                   [], 
9931
                   is_const=True)
9937
                   is_const=True)
9938
    ## radvd-interface.h (module 'applications'): ns3::Time ns3::RadvdInterface::GetLastRaTxTime() [member function]
9939
    cls.add_method('GetLastRaTxTime', 
9940
                   'ns3::Time', 
9941
                   [])
9932
    ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetLinkMtu() const [member function]
9942
    ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetLinkMtu() const [member function]
9933
    cls.add_method('GetLinkMtu', 
9943
    cls.add_method('GetLinkMtu', 
9934
                   'uint32_t', 
9944
                   'uint32_t', 
 Lines 9974-9979    Link Here 
9974
                   'bool', 
9984
                   'bool', 
9975
                   [], 
9985
                   [], 
9976
                   is_const=True)
9986
                   is_const=True)
9987
    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsInitialRtrAdv() [member function]
9988
    cls.add_method('IsInitialRtrAdv', 
9989
                   'bool', 
9990
                   [])
9977
    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsIntervalOpt() const [member function]
9991
    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsIntervalOpt() const [member function]
9978
    cls.add_method('IsIntervalOpt', 
9992
    cls.add_method('IsIntervalOpt', 
9979
                   'bool', 
9993
                   'bool', 
 Lines 10036-10041    Link Here 
10036
    cls.add_method('SetIntervalOpt', 
10050
    cls.add_method('SetIntervalOpt', 
10037
                   'void', 
10051
                   'void', 
10038
                   [param('bool', 'intervalOpt')])
10052
                   [param('bool', 'intervalOpt')])
10053
    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetLastRaTxTime(ns3::Time now) [member function]
10054
    cls.add_method('SetLastRaTxTime', 
10055
                   'void', 
10056
                   [param('ns3::Time', 'now')])
10039
    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetLinkMtu(uint32_t linkMtu) [member function]
10057
    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetLinkMtu(uint32_t linkMtu) [member function]
10040
    cls.add_method('SetLinkMtu', 
10058
    cls.add_method('SetLinkMtu', 
10041
                   'void', 
10059
                   'void', 
(-)a/src/applications/bindings/modulegen__gcc_LP64.py (-10 / +28 lines)
 Lines 4193-4199    Link Here 
4193
    return
4193
    return
4194
4194
4195
def register_Ns3Int64x64_t_methods(root_module, cls):
4195
def register_Ns3Int64x64_t_methods(root_module, cls):
4196
    cls.add_binary_comparison_operator('<=')
4197
    cls.add_binary_comparison_operator('!=')
4196
    cls.add_binary_comparison_operator('!=')
4198
    cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', u'right'))
4197
    cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', u'right'))
4199
    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
4198
    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
 Lines 4207-4212    Link Here 
4207
    cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', u'right'))
4206
    cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', u'right'))
4208
    cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', u'right'))
4207
    cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', u'right'))
4209
    cls.add_output_stream_operator()
4208
    cls.add_output_stream_operator()
4209
    cls.add_binary_comparison_operator('<=')
4210
    cls.add_binary_comparison_operator('==')
4210
    cls.add_binary_comparison_operator('==')
4211
    cls.add_binary_comparison_operator('>=')
4211
    cls.add_binary_comparison_operator('>=')
4212
    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t() [constructor]
4212
    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t() [constructor]
 Lines 5913-5919    Link Here 
5913
    return
5913
    return
5914
5914
5915
def register_Ns3Time_methods(root_module, cls):
5915
def register_Ns3Time_methods(root_module, cls):
5916
    cls.add_binary_comparison_operator('<=')
5917
    cls.add_binary_comparison_operator('!=')
5916
    cls.add_binary_comparison_operator('!=')
5918
    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', u'right'))
5917
    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', u'right'))
5919
    cls.add_binary_numeric_operator('*', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
5918
    cls.add_binary_numeric_operator('*', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
 Lines 5924-5929    Link Here 
5924
    cls.add_binary_comparison_operator('>')
5923
    cls.add_binary_comparison_operator('>')
5925
    cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', u'right'))
5924
    cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', u'right'))
5926
    cls.add_output_stream_operator()
5925
    cls.add_output_stream_operator()
5926
    cls.add_binary_comparison_operator('<=')
5927
    cls.add_binary_comparison_operator('==')
5927
    cls.add_binary_comparison_operator('==')
5928
    cls.add_binary_comparison_operator('>=')
5928
    cls.add_binary_comparison_operator('>=')
5929
    ## nstime.h (module 'core'): ns3::Time::Time() [constructor]
5929
    ## nstime.h (module 'core'): ns3::Time::Time() [constructor]
 Lines 7000-7013    Link Here 
7000
    cls.add_constructor([param('ns3::EnumChecker const &', 'arg0')])
7000
    cls.add_constructor([param('ns3::EnumChecker const &', 'arg0')])
7001
    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker() [constructor]
7001
    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker() [constructor]
7002
    cls.add_constructor([])
7002
    cls.add_constructor([])
7003
    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int v, std::string name) [member function]
7003
    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, std::string name) [member function]
7004
    cls.add_method('Add', 
7004
    cls.add_method('Add', 
7005
                   'void', 
7005
                   'void', 
7006
                   [param('int', 'v'), param('std::string', 'name')])
7006
                   [param('int', 'value'), param('std::string', 'name')])
7007
    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int v, std::string name) [member function]
7007
    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
7008
    cls.add_method('AddDefault', 
7008
    cls.add_method('AddDefault', 
7009
                   'void', 
7009
                   'void', 
7010
                   [param('int', 'v'), param('std::string', 'name')])
7010
                   [param('int', 'value'), param('std::string', 'name')])
7011
    ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
7011
    ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
7012
    cls.add_method('Check', 
7012
    cls.add_method('Check', 
7013
                   'bool', 
7013
                   'bool', 
 Lines 7045-7052    Link Here 
7045
    cls.add_constructor([param('ns3::EnumValue const &', 'arg0')])
7045
    cls.add_constructor([param('ns3::EnumValue const &', 'arg0')])
7046
    ## enum.h (module 'core'): ns3::EnumValue::EnumValue() [constructor]
7046
    ## enum.h (module 'core'): ns3::EnumValue::EnumValue() [constructor]
7047
    cls.add_constructor([])
7047
    cls.add_constructor([])
7048
    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(int v) [constructor]
7048
    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(int value) [constructor]
7049
    cls.add_constructor([param('int', 'v')])
7049
    cls.add_constructor([param('int', 'value')])
7050
    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
7050
    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
7051
    cls.add_method('Copy', 
7051
    cls.add_method('Copy', 
7052
                   'ns3::Ptr< ns3::AttributeValue >', 
7052
                   'ns3::Ptr< ns3::AttributeValue >', 
 Lines 7067-7076    Link Here 
7067
                   'std::string', 
7067
                   'std::string', 
7068
                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
7068
                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
7069
                   is_const=True, is_virtual=True)
7069
                   is_const=True, is_virtual=True)
7070
    ## enum.h (module 'core'): void ns3::EnumValue::Set(int v) [member function]
7070
    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
7071
    cls.add_method('Set', 
7071
    cls.add_method('Set', 
7072
                   'void', 
7072
                   'void', 
7073
                   [param('int', 'v')])
7073
                   [param('int', 'value')])
7074
    return
7074
    return
7075
7075
7076
def register_Ns3ErlangRandomVariable_methods(root_module, cls):
7076
def register_Ns3ErlangRandomVariable_methods(root_module, cls):
 Lines 9869-9876    Link Here 
9869
                   'ns3::TypeId', 
9869
                   'ns3::TypeId', 
9870
                   [], 
9870
                   [], 
9871
                   is_static=True)
9871
                   is_static=True)
9872
    ## radvd.h (module 'applications'): ns3::Radvd::MAX_INITIAL_RTR_ADVERTISEMENTS [variable]
9873
    cls.add_static_attribute('MAX_INITIAL_RTR_ADVERTISEMENTS', 'uint32_t const', is_const=True)
9874
    ## radvd.h (module 'applications'): ns3::Radvd::MAX_INITIAL_RTR_ADVERT_INTERVAL [variable]
9875
    cls.add_static_attribute('MAX_INITIAL_RTR_ADVERT_INTERVAL', 'uint32_t const', is_const=True)
9872
    ## radvd.h (module 'applications'): ns3::Radvd::MAX_RA_DELAY_TIME [variable]
9876
    ## radvd.h (module 'applications'): ns3::Radvd::MAX_RA_DELAY_TIME [variable]
9873
    cls.add_static_attribute('MAX_RA_DELAY_TIME', 'uint32_t const', is_const=True)
9877
    cls.add_static_attribute('MAX_RA_DELAY_TIME', 'uint32_t const', is_const=True)
9878
    ## radvd.h (module 'applications'): ns3::Radvd::MIN_DELAY_BETWEEN_RAS [variable]
9879
    cls.add_static_attribute('MIN_DELAY_BETWEEN_RAS', 'uint32_t const', is_const=True)
9874
    ## radvd.h (module 'applications'): void ns3::Radvd::DoDispose() [member function]
9880
    ## radvd.h (module 'applications'): void ns3::Radvd::DoDispose() [member function]
9875
    cls.add_method('DoDispose', 
9881
    cls.add_method('DoDispose', 
9876
                   'void', 
9882
                   'void', 
 Lines 9929-9934    Link Here 
9929
                   'uint32_t', 
9935
                   'uint32_t', 
9930
                   [], 
9936
                   [], 
9931
                   is_const=True)
9937
                   is_const=True)
9938
    ## radvd-interface.h (module 'applications'): ns3::Time ns3::RadvdInterface::GetLastRaTxTime() [member function]
9939
    cls.add_method('GetLastRaTxTime', 
9940
                   'ns3::Time', 
9941
                   [])
9932
    ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetLinkMtu() const [member function]
9942
    ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetLinkMtu() const [member function]
9933
    cls.add_method('GetLinkMtu', 
9943
    cls.add_method('GetLinkMtu', 
9934
                   'uint32_t', 
9944
                   'uint32_t', 
 Lines 9974-9979    Link Here 
9974
                   'bool', 
9984
                   'bool', 
9975
                   [], 
9985
                   [], 
9976
                   is_const=True)
9986
                   is_const=True)
9987
    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsInitialRtrAdv() [member function]
9988
    cls.add_method('IsInitialRtrAdv', 
9989
                   'bool', 
9990
                   [])
9977
    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsIntervalOpt() const [member function]
9991
    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsIntervalOpt() const [member function]
9978
    cls.add_method('IsIntervalOpt', 
9992
    cls.add_method('IsIntervalOpt', 
9979
                   'bool', 
9993
                   'bool', 
 Lines 10036-10041    Link Here 
10036
    cls.add_method('SetIntervalOpt', 
10050
    cls.add_method('SetIntervalOpt', 
10037
                   'void', 
10051
                   'void', 
10038
                   [param('bool', 'intervalOpt')])
10052
                   [param('bool', 'intervalOpt')])
10053
    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetLastRaTxTime(ns3::Time now) [member function]
10054
    cls.add_method('SetLastRaTxTime', 
10055
                   'void', 
10056
                   [param('ns3::Time', 'now')])
10039
    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetLinkMtu(uint32_t linkMtu) [member function]
10057
    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetLinkMtu(uint32_t linkMtu) [member function]
10040
    cls.add_method('SetLinkMtu', 
10058
    cls.add_method('SetLinkMtu', 
10041
                   'void', 
10059
                   'void', 
(-)a/src/applications/model/radvd-interface.cc (+22 lines)
 Lines 50-55    Link Here 
50
  m_homeAgentPreference = 0;
50
  m_homeAgentPreference = 0;
51
  m_mobRtrSupportFlag = false;
51
  m_mobRtrSupportFlag = false;
52
  m_intervalOpt = false;
52
  m_intervalOpt = false;
53
  m_initialRtrAdvertisementsLeft = 3;
53
}
54
}
54
55
55
RadvdInterface::RadvdInterface (uint32_t interface, uint32_t maxRtrAdvInterval, uint32_t minRtrAdvInterval)
56
RadvdInterface::RadvdInterface (uint32_t interface, uint32_t maxRtrAdvInterval, uint32_t minRtrAdvInterval)
 Lines 76-81    Link Here 
76
  m_homeAgentPreference = 0;
77
  m_homeAgentPreference = 0;
77
  m_mobRtrSupportFlag = false;
78
  m_mobRtrSupportFlag = false;
78
  m_intervalOpt = false;
79
  m_intervalOpt = false;
80
  m_initialRtrAdvertisementsLeft = 3;
79
}
81
}
80
82
81
RadvdInterface::~RadvdInterface ()
83
RadvdInterface::~RadvdInterface ()
 Lines 335-339    Link Here 
335
  NS_LOG_FUNCTION (this << intervalOpt);
337
  NS_LOG_FUNCTION (this << intervalOpt);
336
  m_intervalOpt = intervalOpt;
338
  m_intervalOpt = intervalOpt;
337
}
339
}
340
341
Time RadvdInterface::GetLastRaTxTime ()
342
{
343
  return m_lastSendTime;
344
}
345
346
void RadvdInterface::SetLastRaTxTime (Time now)
347
{
348
  m_lastSendTime = now;
349
  if (m_initialRtrAdvertisementsLeft)
350
    {
351
      m_initialRtrAdvertisementsLeft --;
352
    }
353
}
354
355
bool RadvdInterface::IsInitialRtrAdv ()
356
{
357
  return m_initialRtrAdvertisementsLeft;
358
}
359
338
} /* namespace ns3 */
360
} /* namespace ns3 */
339
361
(-)a/src/applications/model/radvd-interface.h (+30 lines)
 Lines 23-28    Link Here 
23
23
24
#include <list>
24
#include <list>
25
#include "ns3/simple-ref-count.h"
25
#include "ns3/simple-ref-count.h"
26
#include "ns3/nstime.h"
26
#include "radvd-prefix.h"
27
#include "radvd-prefix.h"
27
28
28
namespace ns3
29
namespace ns3
 Lines 308-313    Link Here 
308
   */
309
   */
309
  void SetIntervalOpt (bool intervalOpt);
310
  void SetIntervalOpt (bool intervalOpt);
310
311
312
  /**
313
   * \brief Get the last time a RA has been sent.
314
   * \returns the last RA send time
315
   */
316
  Time GetLastRaTxTime ();
317
318
  /**
319
   * \brief Set the last RA send time. It also decrements the initial Rtr Advertisements counter.
320
   * \param the last RA send time
321
   */
322
  void SetLastRaTxTime (Time now);
323
324
  /**
325
   * \brief Checks if the interface is subject to the initial Rtr Advertisements rule.
326
   * \returns true if the initial Rtr Advertisements counter is greater than zero.
327
   */
328
  bool IsInitialRtrAdv ();
329
311
private:
330
private:
312
331
313
  /**
332
  /**
 Lines 418-423    Link Here 
418
   * \brief Flag to add Advertisement Interval option in RA.
437
   * \brief Flag to add Advertisement Interval option in RA.
419
   */
438
   */
420
  bool m_intervalOpt;
439
  bool m_intervalOpt;
440
441
  /**
442
   * \brief Last RA send time.
443
   */
444
  Time m_lastSendTime;
445
446
  /**
447
   * \brief Number of fast announcement to do
448
   */
449
  uint8_t m_initialRtrAdvertisementsLeft;
450
421
};
451
};
422
452
423
} /* namespace ns3 */
453
} /* namespace ns3 */
(-)a/src/applications/model/radvd.cc (-44 / +113 lines)
 Lines 21-26    Link Here 
21
 */
21
 */
22
22
23
#include "ns3/log.h"
23
#include "ns3/log.h"
24
#include "ns3/abort.h"
24
#include "ns3/ipv6-address.h"
25
#include "ns3/ipv6-address.h"
25
#include "ns3/nstime.h"
26
#include "ns3/nstime.h"
26
#include "ns3/simulator.h"
27
#include "ns3/simulator.h"
 Lines 29-35    Link Here 
29
#include "ns3/uinteger.h"
30
#include "ns3/uinteger.h"
30
#include "ns3/inet6-socket-address.h"
31
#include "ns3/inet6-socket-address.h"
31
#include "ns3/ipv6.h"
32
#include "ns3/ipv6.h"
33
#include "ns3/ipv6-l3-protocol.h"
34
#include "ns3/ipv6-interface.h"
32
#include "ns3/ipv6-raw-socket-factory.h"
35
#include "ns3/ipv6-raw-socket-factory.h"
36
#include "ns3/ipv6-packet-info-tag.h"
33
#include "ns3/ipv6-header.h"
37
#include "ns3/ipv6-header.h"
34
#include "ns3/icmpv6-header.h"
38
#include "ns3/icmpv6-header.h"
35
#include "ns3/string.h"
39
#include "ns3/string.h"
 Lines 71-82    Link Here 
71
      *it = 0;
75
      *it = 0;
72
    }
76
    }
73
  m_configurations.clear ();
77
  m_configurations.clear ();
74
  m_socket = 0;
78
  m_recvSocket = 0;
75
}
79
}
76
80
77
void Radvd::DoDispose ()
81
void Radvd::DoDispose ()
78
{
82
{
79
  NS_LOG_FUNCTION (this);
83
  NS_LOG_FUNCTION (this);
84
85
  m_recvSocket->Close ();
86
  m_recvSocket = 0;
87
88
  for (SocketMapI it = m_sendSockets.begin (); it != m_sendSockets.end (); ++it)
89
    {
90
      it->second->Close ();
91
      it->second = 0;
92
    }
93
80
  Application::DoDispose ();
94
  Application::DoDispose ();
81
}
95
}
82
96
 Lines 84-106    Link Here 
84
{
98
{
85
  NS_LOG_FUNCTION (this);
99
  NS_LOG_FUNCTION (this);
86
100
87
  if (!m_socket)
101
  TypeId tid = TypeId::LookupByName ("ns3::Ipv6RawSocketFactory");
102
103
  if (!m_recvSocket)
88
    {
104
    {
89
      TypeId tid = TypeId::LookupByName ("ns3::Ipv6RawSocketFactory");
105
      m_recvSocket = Socket::CreateSocket (GetNode (), tid);
90
      m_socket = Socket::CreateSocket (GetNode (), tid);
91
106
92
      NS_ASSERT (m_socket);
107
      NS_ASSERT (m_recvSocket);
93
108
94
      /*    m_socket->Bind (Inet6SocketAddress (m_localAddress, 0)); */
109
      m_recvSocket->Bind (Inet6SocketAddress (Ipv6Address::GetAllRoutersMulticast (), 0));
95
      /*    m_socket->Connect (Inet6SocketAddress (Ipv6Address::GetAllNodesMulticast (), 0)); */
110
      m_recvSocket->SetAttribute ("Protocol", UintegerValue (Ipv6Header::IPV6_ICMPV6));
96
      m_socket->SetAttribute ("Protocol", UintegerValue (Ipv6Header::IPV6_ICMPV6));
111
      m_recvSocket->SetRecvCallback (MakeCallback (&Radvd::HandleRead, this));
97
      m_socket->SetRecvCallback (MakeCallback (&Radvd::HandleRead, this));
112
      m_recvSocket->ShutdownSend ();
113
      m_recvSocket->SetRecvPktInfo (true);
98
    }
114
    }
99
115
100
  for (RadvdInterfaceListCI it = m_configurations.begin (); it != m_configurations.end (); it++)
116
  for (RadvdInterfaceListCI it = m_configurations.begin (); it != m_configurations.end (); it++)
101
    {
117
    {
102
      m_eventIds[(*it)->GetInterface ()] = EventId ();
118
      if ((*it)->IsSendAdvert ())
103
      ScheduleTransmit (Seconds (0.), (*it), m_eventIds[(*it)->GetInterface ()], Ipv6Address::GetAllNodesMulticast (), true); 
119
        {
120
          m_unsolicitedEventIds[(*it)->GetInterface ()] = Simulator::Schedule (Seconds (0.), &Radvd::Send,
121
                                                                               this, (*it), Ipv6Address::GetAllNodesMulticast (), true);
122
        }
123
124
      if (m_sendSockets.find ((*it)->GetInterface ()) == m_sendSockets.end ())
125
        {
126
          Ptr<Ipv6L3Protocol> ipv6 = GetNode ()->GetObject<Ipv6L3Protocol> ();
127
          Ptr<Ipv6Interface> iFace = ipv6->GetInterface ((*it)->GetInterface ());
128
129
          m_sendSockets[(*it)->GetInterface ()] = Socket::CreateSocket (GetNode (), tid);
130
          m_sendSockets[(*it)->GetInterface ()]->Bind (Inet6SocketAddress (iFace->GetLinkLocalAddress ().GetAddress (), 0));
131
          m_sendSockets[(*it)->GetInterface ()]->SetAttribute ("Protocol", UintegerValue (Ipv6Header::IPV6_ICMPV6));
132
          m_sendSockets[(*it)->GetInterface ()]->ShutdownRecv ();
133
        }
104
    }
134
    }
105
}
135
}
106
136
 Lines 108-123    Link Here 
108
{
138
{
109
  NS_LOG_FUNCTION (this);
139
  NS_LOG_FUNCTION (this);
110
140
111
  if (m_socket)
141
  if (m_recvSocket)
112
    {
142
    {
113
      m_socket->SetRecvCallback (MakeNullCallback<void, Ptr<Socket> > ());
143
      m_recvSocket->SetRecvCallback (MakeNullCallback<void, Ptr<Socket> > ());
114
    }
144
    }
115
145
116
  for (EventIdMapI it = m_eventIds.begin (); it != m_eventIds.end (); ++it)
146
  for (EventIdMapI it = m_unsolicitedEventIds.begin (); it != m_unsolicitedEventIds.end (); ++it)
117
    {
147
    {
118
      Simulator::Cancel ((*it).second);
148
      Simulator::Cancel ((*it).second);
119
    }
149
    }
120
  m_eventIds.clear ();
150
  m_unsolicitedEventIds.clear ();
151
152
  for (EventIdMapI it = m_solicitedEventIds.begin (); it != m_solicitedEventIds.end (); ++it)
153
    {
154
      Simulator::Cancel ((*it).second);
155
    }
156
  m_solicitedEventIds.clear ();
121
}
157
}
122
158
123
void Radvd::AddConfiguration (Ptr<RadvdInterface> routerInterface)
159
void Radvd::AddConfiguration (Ptr<RadvdInterface> routerInterface)
 Lines 134-159    Link Here 
134
  return 1;
170
  return 1;
135
}
171
}
136
172
137
void Radvd::ScheduleTransmit (Time dt, Ptr<RadvdInterface> config, EventId& eventId, Ipv6Address dst, bool reschedule)
138
{
139
  NS_LOG_FUNCTION (this << dt << config << &eventId << dst << reschedule);
140
  eventId = Simulator::Schedule (dt, &Radvd::Send, this, config, dst, reschedule);
141
}
142
143
void Radvd::Send (Ptr<RadvdInterface> config, Ipv6Address dst, bool reschedule)
173
void Radvd::Send (Ptr<RadvdInterface> config, Ipv6Address dst, bool reschedule)
144
{
174
{
145
  NS_LOG_FUNCTION (this << dst << reschedule);
175
  NS_LOG_FUNCTION (this << dst << reschedule);
146
  NS_ASSERT (m_eventIds[config->GetInterface ()].IsExpired ());
176
177
  if (reschedule == true)
178
    {
179
      config->SetLastRaTxTime (Simulator::Now ());
180
    }
181
147
  Icmpv6RA raHdr;
182
  Icmpv6RA raHdr;
148
  Icmpv6OptionLinkLayerAddress llaHdr;
183
  Icmpv6OptionLinkLayerAddress llaHdr;
149
  Icmpv6OptionMtu mtuHdr;
184
  Icmpv6OptionMtu mtuHdr;
150
  Icmpv6OptionPrefixInformation prefixHdr;
185
  Icmpv6OptionPrefixInformation prefixHdr;
151
186
152
  if (m_eventIds.size () == 0)
153
    {
154
      return;
155
    }
156
157
  std::list<Ptr<RadvdPrefix> > prefixes = config->GetPrefixes ();
187
  std::list<Ptr<RadvdPrefix> > prefixes = config->GetPrefixes ();
158
  Ptr<Packet> p = Create<Packet> ();
188
  Ptr<Packet> p = Create<Packet> ();
159
  Ptr<Ipv6> ipv6 = GetNode ()->GetObject<Ipv6> ();
189
  Ptr<Ipv6> ipv6 = GetNode ()->GetObject<Ipv6> ();
 Lines 212-220    Link Here 
212
      p->AddHeader (prefixHdr);
242
      p->AddHeader (prefixHdr);
213
    }
243
    }
214
244
215
  Ipv6Address src = ipv6->GetAddress (config->GetInterface (), 0).GetAddress ();
245
  Address sockAddr;
216
  m_socket->Bind (Inet6SocketAddress (src, 0));
246
  m_sendSockets[config->GetInterface ()]->GetSockName (sockAddr);
217
  m_socket->Connect (Inet6SocketAddress (dst, 0));
247
  Ipv6Address src = Inet6SocketAddress::ConvertFrom (sockAddr).GetIpv6 ();
218
248
219
  /* as we know interface index that will be used to send RA and 
249
  /* as we know interface index that will be used to send RA and 
220
   * we always send RA with router's link-local address, we can 
250
   * we always send RA with router's link-local address, we can 
 Lines 231-245    Link Here 
231
  p->AddPacketTag (ttl);
261
  p->AddPacketTag (ttl);
232
262
233
  /* send RA */
263
  /* send RA */
234
  NS_LOG_LOGIC ("Send RA");
264
  NS_LOG_LOGIC ("Send RA to " << dst);
235
  m_socket->Send (p, 0);
265
  m_sendSockets[config->GetInterface ()]->SendTo (p, 0, Inet6SocketAddress (dst, 0));
236
266
237
  if (reschedule)
267
  if (reschedule)
238
    {
268
    {
239
      uint64_t delay = static_cast<uint64_t> (m_jitter->GetValue (config->GetMinRtrAdvInterval (), config->GetMaxRtrAdvInterval ()) + 0.5);
269
      uint64_t delay = static_cast<uint64_t> (m_jitter->GetValue (config->GetMinRtrAdvInterval (), config->GetMaxRtrAdvInterval ()) + 0.5);
270
      if (config->IsInitialRtrAdv ())
271
        {
272
          if (delay > MAX_INITIAL_RTR_ADVERT_INTERVAL)
273
            delay = MAX_INITIAL_RTR_ADVERT_INTERVAL;
274
        }
275
240
      NS_LOG_INFO ("Reschedule in " << delay);
276
      NS_LOG_INFO ("Reschedule in " << delay);
241
      Time t = MilliSeconds (delay);
277
      Time t = MilliSeconds (delay);
242
      ScheduleTransmit (t, config, m_eventIds[config->GetInterface ()], Ipv6Address::GetAllNodesMulticast (), reschedule);
278
      m_unsolicitedEventIds[config->GetInterface ()] = Simulator::Schedule (t, &Radvd::Send, this, config, Ipv6Address::GetAllNodesMulticast (), true);
243
    }
279
    }
244
}
280
}
245
281
 Lines 253-261    Link Here 
253
    {
289
    {
254
      if (Inet6SocketAddress::IsMatchingType (from))
290
      if (Inet6SocketAddress::IsMatchingType (from))
255
        {
291
        {
292
          Ipv6PacketInfoTag interfaceInfo;
293
          if (!packet->RemovePacketTag (interfaceInfo))
294
            {
295
              NS_ABORT_MSG ("No incoming interface on RADVD message, aborting.");
296
            }
297
          uint32_t incomingIf = interfaceInfo.GetRecvIf ();
298
          Ptr<NetDevice> dev = GetNode ()->GetDevice (incomingIf);
299
          Ptr<Ipv6> ipv6 = GetNode ()->GetObject<Ipv6> ();
300
          uint32_t ipInterfaceIndex = ipv6->GetInterfaceForDevice (dev);
301
256
          Ipv6Header hdr;
302
          Ipv6Header hdr;
257
          Icmpv6RS rsHdr;
303
          Icmpv6RS rsHdr;
258
          Inet6SocketAddress address = Inet6SocketAddress::ConvertFrom (from);
259
          uint64_t delay = 0;
304
          uint64_t delay = 0;
260
          Time t;
305
          Time t;
261
306
 Lines 269-288    Link Here 
269
              packet->RemoveHeader (rsHdr);
314
              packet->RemoveHeader (rsHdr);
270
              NS_LOG_INFO ("Received ICMPv6 Router Solicitation from " << hdr.GetSourceAddress () << " code = " << (uint32_t)rsHdr.GetCode ());
315
              NS_LOG_INFO ("Received ICMPv6 Router Solicitation from " << hdr.GetSourceAddress () << " code = " << (uint32_t)rsHdr.GetCode ());
271
316
272
              /* XXX advertise just prefix(es) for the interface not all */
273
              for (RadvdInterfaceListCI it = m_configurations.begin (); it != m_configurations.end (); it++)
317
              for (RadvdInterfaceListCI it = m_configurations.begin (); it != m_configurations.end (); it++)
274
                {
318
                {
275
                  /* calculate minimum delay between RA */
319
                  if (ipInterfaceIndex == (*it)->GetInterface ())
276
                  delay = static_cast<uint64_t> (m_jitter->GetValue (0, MAX_RA_DELAY_TIME) + 0.5); 
320
                    {
277
                  t = Simulator::Now () + MilliSeconds (delay); /* absolute time of solicited RA */
321
                      /* calculate minimum delay between RA */
322
                      delay = static_cast<uint64_t> (m_jitter->GetValue (0, MAX_RA_DELAY_TIME) + 0.5);
323
                      t = Simulator::Now () + MilliSeconds (delay); /* absolute time of solicited RA */
278
324
279
                  /* if our solicited RA is before the next periodic RA, we schedule it */
325
                      if (Simulator::Now () < (*it)->GetLastRaTxTime () + MilliSeconds (MIN_DELAY_BETWEEN_RAS) )
280
                  if (t.GetTimeStep () < static_cast<int64_t> (m_eventIds[(*it)->GetInterface ()].GetTs ()))
326
                        {
281
                    {
327
                          t += MilliSeconds (MIN_DELAY_BETWEEN_RAS);
282
                      NS_LOG_INFO ("schedule new RA");
328
                        }
283
                      EventId ei;
284
329
285
                      ScheduleTransmit (MilliSeconds (delay), (*it), ei, address.GetIpv6 (), false);
330
                      /* if our solicited RA is before the next periodic RA, we schedule it */
331
                      bool scheduleSingle = true;
332
333
                      if (m_solicitedEventIds.find ((*it)->GetInterface ()) != m_solicitedEventIds.end ())
334
                        {
335
                          if (m_solicitedEventIds[(*it)->GetInterface ()].IsRunning ())
336
                            {
337
                              scheduleSingle = false;
338
                            }
339
                        }
340
341
                      if (m_unsolicitedEventIds.find ((*it)->GetInterface ()) != m_unsolicitedEventIds.end ())
342
                        {
343
                          if (t.GetTimeStep () > static_cast<int64_t> (m_unsolicitedEventIds[(*it)->GetInterface ()].GetTs ()))
344
                            {
345
                              scheduleSingle = false;
346
                            }
347
                        }
348
349
                      if (scheduleSingle)
350
                        {
351
                          NS_LOG_INFO ("schedule new RA");
352
                          m_solicitedEventIds[(*it)->GetInterface ()] = Simulator::Schedule (MilliSeconds (delay), &Radvd::Send,
353
                                                                                             this, (*it), Ipv6Address::GetAllNodesMulticast (), false);
354
                        }
286
                    }
355
                    }
287
                }
356
                }
288
              break;
357
              break;
(-)a/src/applications/model/radvd.h (-13 / +32 lines)
 Lines 67-72    Link Here 
67
   * \brief Default value for maximum delay of RA (ms)
67
   * \brief Default value for maximum delay of RA (ms)
68
   */
68
   */
69
  static const uint32_t MAX_RA_DELAY_TIME = 500;
69
  static const uint32_t MAX_RA_DELAY_TIME = 500;
70
  /**
71
   * \brief Default value for maximum initial RA advertisements
72
   */
73
  static const uint32_t MAX_INITIAL_RTR_ADVERTISEMENTS = 3;
74
  /**
75
   * \brief Default value for maximum initial RA advertisements interval (ms)
76
   */
77
  static const uint32_t MAX_INITIAL_RTR_ADVERT_INTERVAL = 16000;
78
  /**
79
   * \brief Default value for minimum delay between RA advertisements (ms)
80
   */
81
  static const uint32_t MIN_DELAY_BETWEEN_RAS = 3000;
70
82
71
  /**
83
  /**
72
   * \brief Add configuration for an interface;
84
   * \brief Add configuration for an interface;
 Lines 105-110    Link Here 
105
  /// Container Const Iterator: interface number, EventId
117
  /// Container Const Iterator: interface number, EventId
106
  typedef std::map<uint32_t, EventId>::const_iterator EventIdMapCI;
118
  typedef std::map<uint32_t, EventId>::const_iterator EventIdMapCI;
107
119
120
  /// Container: interface number, Socket
121
  typedef std::map<uint32_t, Ptr<Socket> > SocketMap;
122
  /// Container Iterator: interface number, Socket
123
  typedef std::map<uint32_t, Ptr<Socket> >::iterator SocketMapI;
124
  /// Container Const Iterator: interface number, Socket
125
  typedef std::map<uint32_t, Ptr<Socket> >::const_iterator SocketMapCI;
126
108
  /**
127
  /**
109
   * \brief Start the application.
128
   * \brief Start the application.
110
   */
129
   */
 Lines 116-131    Link Here 
116
  virtual void StopApplication ();
135
  virtual void StopApplication ();
117
136
118
  /**
137
  /**
119
   * \brief Schedule sending a packet.
120
   * \param dt interval between packet
121
   * \param config interface configuration
122
   * \param eventId event ID associated
123
   * \param dst IPv6 destination address
124
   * \param reschedule if true another send will be reschedule (periodic)
125
   */
126
  void ScheduleTransmit (Time dt, Ptr<RadvdInterface> config, EventId& eventId, Ipv6Address dst = Ipv6Address::GetAllNodesMulticast (), bool reschedule = false);
127
128
  /**
129
   * \brief Send a packet.
138
   * \brief Send a packet.
130
   * \param config interface configuration
139
   * \param config interface configuration
131
   * \param dst destination address (default ff02::1)
140
   * \param dst destination address (default ff02::1)
 Lines 140-148    Link Here 
140
  void HandleRead (Ptr<Socket> socket);
149
  void HandleRead (Ptr<Socket> socket);
141
150
142
  /**
151
  /**
152
   * \brief Raw socket to receive RS.
153
   */
154
  Ptr<Socket> m_recvSocket;
155
156
  /**
143
   * \brief Raw socket to send RA.
157
   * \brief Raw socket to send RA.
144
   */
158
   */
145
  Ptr<Socket> m_socket;
159
  SocketMap m_sendSockets;
146
160
147
  /**
161
  /**
148
   * \brief List of configuration for interface.
162
   * \brief List of configuration for interface.
 Lines 150-158    Link Here 
150
  RadvdInterfaceList m_configurations;
164
  RadvdInterfaceList m_configurations;
151
165
152
  /**
166
  /**
153
   * \brief Event ID map.
167
   * \brief Event ID map for unsolicited RAs.
154
   */
168
   */
155
  EventIdMap m_eventIds;
169
  EventIdMap m_unsolicitedEventIds;
170
171
  /**
172
   * \brief Event ID map for solicited RAs.
173
   */
174
  EventIdMap m_solicitedEventIds;
156
175
157
  /**
176
  /**
158
   * \brief Variable to provide jitter in advertisement interval
177
   * \brief Variable to provide jitter in advertisement interval

Return to bug 2016