diff --git a/bindings/modulegen__gcc_ILP32.py b/bindings/modulegen__gcc_ILP32.py
index 0ca790e..2a28ac4 100644
--- a/bindings/modulegen__gcc_ILP32.py
+++ b/bindings/modulegen__gcc_ILP32.py
@@ -54,18 +54,64 @@
     module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList::Iterator'])
     ## callback.h (module 'core'): ns3::CallbackBase [class]
     module.add_class('CallbackBase', import_from_module='ns.core')
+    ## ccnx-consumer-helper.h (module 'NDNabstraction'): ns3::CcnxConsumerHelper [class]
+    module.add_class('CcnxConsumerHelper')
+    ## ccnx-content-store.h (module 'NDNabstraction'): ns3::CcnxContentStoreContainer [struct]
+    module.add_class('CcnxContentStoreContainer')
+    ## ccnx-content-store.h (module 'NDNabstraction'): ns3::CcnxContentStoreEntry [class]
+    module.add_class('CcnxContentStoreEntry')
     ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxDecodingHelper [class]
     module.add_class('CcnxDecodingHelper')
     ## ccnx-encoding-helper.h (module 'NDNabstraction'): ns3::CcnxEncodingHelper [class]
     module.add_class('CcnxEncodingHelper')
-    ## ccnx-face-container.h (module 'NDNabstraction'): ns3::CcnxFaceContainer [class]
-    module.add_class('CcnxFaceContainer')
+    ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFib [class]
+    module.add_class('CcnxFib')
+    ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibEntryContainer [struct]
+    module.add_class('CcnxFibEntryContainer')
+    ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibFaceMetric [class]
+    module.add_class('CcnxFibFaceMetric')
+    ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibFaceMetricContainer [struct]
+    module.add_class('CcnxFibFaceMetricContainer')
     ## ccnx-forwarding-helper.h (module 'NDNabstraction'): ns3::CcnxForwardingHelper [class]
     module.add_class('CcnxForwardingHelper', allow_subclassing=True)
     ## ccnx-header-helper.h (module 'NDNabstraction'): ns3::CcnxHeaderHelper [class]
     module.add_class('CcnxHeaderHelper')
+    ## ccnx-interest-sender-helper.h (module 'NDNabstraction'): ns3::CcnxInterestSenderHelper [class]
+    module.add_class('CcnxInterestSenderHelper')
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxPitEntry [struct]
+    module.add_class('CcnxPitEntry')
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxPitEntry::AddIncoming [struct]
+    module.add_class('AddIncoming', outer_class=root_module['ns3::CcnxPitEntry'])
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxPitEntry::AddOutgoing [struct]
+    module.add_class('AddOutgoing', outer_class=root_module['ns3::CcnxPitEntry'])
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxPitEntry::ClearIncoming [struct]
+    module.add_class('ClearIncoming', outer_class=root_module['ns3::CcnxPitEntry'])
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxPitEntry::DeleteIncoming [struct]
+    module.add_class('DeleteIncoming', outer_class=root_module['ns3::CcnxPitEntry'])
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxPitEntry::SetFibEntry [struct]
+    module.add_class('SetFibEntry', outer_class=root_module['ns3::CcnxPitEntry'])
+    ## ccnx-pit.h (module 'NDNabstraction'): ns3::CcnxPitEntryContainer [struct]
+    module.add_class('CcnxPitEntryContainer')
+    ## ccnx-pit-entry-incoming-face.h (module 'NDNabstraction'): ns3::CcnxPitEntryIncomingFace [struct]
+    module.add_class('CcnxPitEntryIncomingFace')
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxPitEntryIncomingFaceContainer [struct]
+    module.add_class('CcnxPitEntryIncomingFaceContainer')
+    ## ccnx-pit.h (module 'NDNabstraction'): ns3::CcnxPitEntryNotFound [class]
+    module.add_class('CcnxPitEntryNotFound')
+    ## ccnx-pit-entry-outgoing-face.h (module 'NDNabstraction'): ns3::CcnxPitEntryOutgoingFace [struct]
+    module.add_class('CcnxPitEntryOutgoingFace')
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxPitEntryOutgoingFaceContainer [struct]
+    module.add_class('CcnxPitEntryOutgoingFaceContainer')
+    ## ccnx-producer-helper.h (module 'NDNabstraction'): ns3::CcnxProducerHelper [class]
+    module.add_class('CcnxProducerHelper')
+    ## ccnx-rit.h (module 'NDNabstraction'): ns3::CcnxRitContainer [struct]
+    module.add_class('CcnxRitContainer')
+    ## ccnx-rit.h (module 'NDNabstraction'): ns3::CcnxRitEntry [struct]
+    module.add_class('CcnxRitEntry')
     ## ccnx-header-helper.h (module 'NDNabstraction'): ns3::CcnxUnknownHeaderException [class]
     module.add_class('CcnxUnknownHeaderException')
+    ## data-rate.h (module 'network'): ns3::DataRate [class]
+    module.add_class('DataRate', import_from_module='ns.network')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
@@ -82,6 +128,10 @@
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
     ## log.h (module 'core'): ns3::LogComponent [class]
     module.add_class('LogComponent', import_from_module='ns.core')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## net-device-container.h (module 'network'): ns3::NetDeviceContainer [class]
     module.add_class('NetDeviceContainer', import_from_module='ns.network')
     ## node-container.h (module 'network'): ns3::NodeContainer [class]
@@ -118,6 +168,8 @@
     module.add_class('PcapHelperForCcnx', allow_subclassing=True)
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
+    ## point-to-point-helper.h (module 'point-to-point'): ns3::PointToPointHelper [class]
+    module.add_class('PointToPointHelper', import_from_module='ns.point_to_point', parent=[root_module['ns3::PcapHelperForDevice'], root_module['ns3::AsciiTraceHelperForDevice']])
     ## random-variable.h (module 'core'): ns3::RandomVariable [class]
     module.add_class('RandomVariable', import_from_module='ns.core')
     ## random-variable.h (module 'core'): ns3::SeedManager [class]
@@ -190,6 +242,8 @@
     module.add_class('ParetoVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariable'])
     ## pcap-file-wrapper.h (module 'network'): ns3::PcapFileWrapper [class]
     module.add_class('PcapFileWrapper', import_from_module='ns.network', parent=root_module['ns3::Object'])
+    ## queue.h (module 'network'): ns3::Queue [class]
+    module.add_class('Queue', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> > [class]
@@ -198,14 +252,18 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeValue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeValue>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxParser::Block, ns3::empty, ns3::DefaultDeleter<ns3::CcnxParser::Block> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::CcnxParser::Block', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CcnxParser::Block>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnbParser::Block, ns3::empty, ns3::DefaultDeleter<ns3::CcnbParser::Block> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::CcnbParser::Block', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CcnbParser::Block>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxFaceContainer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxFaceContainer> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::CcnxFaceContainer', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CcnxFaceContainer>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxFibEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxFibEntry> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::CcnxFibEntry', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CcnxFibEntry>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxNameComponents, ns3::empty, ns3::DefaultDeleter<ns3::CcnxNameComponents> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::CcnxNameComponents', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CcnxNameComponents>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxRoute, ns3::empty, ns3::DefaultDeleter<ns3::CcnxRoute> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::CcnxRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CcnxRoute>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Name::Components, ns3::empty, ns3::DefaultDeleter<ns3::Name::Components> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::Name::Components', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Name::Components>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > [class]
@@ -254,6 +312,10 @@
     module.add_class('AttributeChecker', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     ## attribute.h (module 'core'): ns3::AttributeValue [class]
     module.add_class('AttributeValue', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
+    ## boolean.h (module 'core'): ns3::BooleanChecker [class]
+    module.add_class('BooleanChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## boolean.h (module 'core'): ns3::BooleanValue [class]
+    module.add_class('BooleanValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## callback.h (module 'core'): ns3::CallbackChecker [class]
     module.add_class('CallbackChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## callback.h (module 'core'): ns3::CallbackImplBase [class]
@@ -262,30 +324,56 @@
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## ccnx.h (module 'NDNabstraction'): ns3::Ccnx [class]
     module.add_class('Ccnx', parent=root_module['ns3::Object'])
-    ## ccnx.h (module 'NDNabstraction'): ns3::Ccnx::ccn_tt [enumeration]
-    module.add_enum('ccn_tt', ['CCN_EXT', 'CCN_TAG', 'CCN_DTAG', 'CCN_ATTR', 'CCN_DATTR', 'CCN_BLOB', 'CCN_UDATA', 'CCN_NO_TOKEN'], outer_class=root_module['ns3::Ccnx'])
-    ## ccnx.h (module 'NDNabstraction'): ns3::Ccnx [enumeration]
-    module.add_enum('', ['CCN_CLOSE'], outer_class=root_module['ns3::Ccnx'])
-    ## ccnx.h (module 'NDNabstraction'): ns3::Ccnx::ccn_dtag [enumeration]
-    module.add_enum('ccn_dtag', ['CCN_DTAG_Any', 'CCN_DTAG_Name', 'CCN_DTAG_Component', 'CCN_DTAG_Certificate', 'CCN_DTAG_Collection', 'CCN_DTAG_CompleteName', 'CCN_DTAG_Content', 'CCN_DTAG_SignedInfo', 'CCN_DTAG_ContentDigest', 'CCN_DTAG_ContentHash', 'CCN_DTAG_Count', 'CCN_DTAG_Header', 'CCN_DTAG_Interest', 'CCN_DTAG_Key', 'CCN_DTAG_KeyLocator', 'CCN_DTAG_KeyName', 'CCN_DTAG_Length', 'CCN_DTAG_Link', 'CCN_DTAG_LinkAuthenticator', 'CCN_DTAG_NameComponentCount', 'CCN_DTAG_RootDigest', 'CCN_DTAG_Signature', 'CCN_DTAG_Start', 'CCN_DTAG_Timestamp', 'CCN_DTAG_Type', 'CCN_DTAG_Nonce', 'CCN_DTAG_Scope', 'CCN_DTAG_Exclude', 'CCN_DTAG_Bloom', 'CCN_DTAG_BloomSeed', 'CCN_DTAG_AnswerOriginKind', 'CCN_DTAG_InterestLifetime', 'CCN_DTAG_Witness', 'CCN_DTAG_SignatureBits', 'CCN_DTAG_DigestAlgorithm', 'CCN_DTAG_BlockSize', 'CCN_DTAG_FreshnessSeconds', 'CCN_DTAG_FinalBlockID', 'CCN_DTAG_PublisherPublicKeyDigest', 'CCN_DTAG_PublisherCertificateDigest', 'CCN_DTAG_PublisherIssuerKeyDigest', 'CCN_DTAG_PublisherIssuerCertificateDigest', 'CCN_DTAG_ContentObject', 'CCN_DTAG_WrappedKey', 'CCN_DTAG_WrappingKeyIdentifier', 'CCN_DTAG_WrapAlgorithm', 'CCN_DTAG_KeyAlgorithm', 'CCN_DTAG_Label', 'CCN_DTAG_EncryptedKey', 'CCN_DTAG_EncryptedNonceKey', 'CCN_DTAG_WrappingKeyName', 'CCN_DTAG_Action', 'CCN_DTAG_FaceID', 'CCN_DTAG_IPProto', 'CCN_DTAG_Host', 'CCN_DTAG_Port', 'CCN_DTAG_MulticastInterface', 'CCN_DTAG_ForwardingFlags', 'CCN_DTAG_FaceInstance', 'CCN_DTAG_ForwardingEntry', 'CCN_DTAG_MulticastTTL', 'CCN_DTAG_MinSuffixComponents', 'CCN_DTAG_MaxSuffixComponents', 'CCN_DTAG_ChildSelector', 'CCN_DTAG_RepositoryInfo', 'CCN_DTAG_Version', 'CCN_DTAG_RepositoryVersion', 'CCN_DTAG_GlobalPrefix', 'CCN_DTAG_LocalName', 'CCN_DTAG_Policy', 'CCN_DTAG_Namespace', 'CCN_DTAG_GlobalPrefixName', 'CCN_DTAG_PolicyVersion', 'CCN_DTAG_KeyValueSet', 'CCN_DTAG_KeyValuePair', 'CCN_DTAG_IntegerValue', 'CCN_DTAG_DecimalValue', 'CCN_DTAG_StringValue', 'CCN_DTAG_BinaryValue', 'CCN_DTAG_NameValue', 'CCN_DTAG_Entry', 'CCN_DTAG_ACL', 'CCN_DTAG_ParameterizedName', 'CCN_DTAG_Prefix', 'CCN_DTAG_Suffix', 'CCN_DTAG_Root', 'CCN_DTAG_ProfileName', 'CCN_DTAG_Parameters', 'CCN_DTAG_InfoString', 'CCN_DTAG_StatusResponse', 'CCN_DTAG_StatusCode', 'CCN_DTAG_StatusText', 'CCN_DTAG_SequenceNumber', 'CCN_DTAG_CCNProtocolDataUnit'], outer_class=root_module['ns3::Ccnx'])
+    ## ccnx-consumer.h (module 'NDNabstraction'): ns3::CcnxConsumer [class]
+    module.add_class('CcnxConsumer', parent=root_module['ns3::Application'])
     ## ccnx-content-object-header.h (module 'NDNabstraction'): ns3::CcnxContentObjectHeader [class]
     module.add_class('CcnxContentObjectHeader', parent=root_module['ns3::Header'])
     ## ccnx-content-object-header.h (module 'NDNabstraction'): ns3::CcnxContentObjectTail [class]
-    module.add_class('CcnxContentObjectTail', parent=root_module['ns3::Header'])
+    module.add_class('CcnxContentObjectTail', parent=root_module['ns3::Trailer'])
+    ## ccnx-content-store.h (module 'NDNabstraction'): ns3::CcnxContentStore [class]
+    module.add_class('CcnxContentStore', parent=root_module['ns3::Object'])
     ## ccnx-face.h (module 'NDNabstraction'): ns3::CcnxFace [class]
     module.add_class('CcnxFace', parent=root_module['ns3::Object'])
+    ## ccnx-face-container.h (module 'NDNabstraction'): ns3::CcnxFaceContainer [class]
+    module.add_class('CcnxFaceContainer', parent=root_module['ns3::SimpleRefCount< ns3::CcnxFaceContainer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxFaceContainer> >'])
+    ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibEntry [class]
+    module.add_class('CcnxFibEntry', parent=root_module['ns3::SimpleRefCount< ns3::CcnxFibEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxFibEntry> >'])
     ## ccnx-forwarding-strategy.h (module 'NDNabstraction'): ns3::CcnxForwardingStrategy [class]
     module.add_class('CcnxForwardingStrategy', parent=root_module['ns3::Object'])
     ## ccnx-interest-header.h (module 'NDNabstraction'): ns3::CcnxInterestHeader [class]
     module.add_class('CcnxInterestHeader', parent=root_module['ns3::Header'])
+    ## ccnx-interest-sender.h (module 'NDNabstraction'): ns3::CcnxInterestSender [class]
+    module.add_class('CcnxInterestSender', parent=root_module['ns3::Application'])
     ## ccnx-l3-protocol.h (module 'NDNabstraction'): ns3::CcnxL3Protocol [class]
     module.add_class('CcnxL3Protocol', parent=root_module['ns3::Ccnx'])
     ## ccnx-l3-protocol.h (module 'NDNabstraction'): ns3::CcnxL3Protocol::DropReason [enumeration]
     module.add_enum('DropReason', ['DROP_DUPLICATE_INTEREST', 'DROP_CONGESTION', 'DROP_NO_ROUTE', 'DROP_INTERFACE_DOWN'], outer_class=root_module['ns3::CcnxL3Protocol'])
     ## ccnx-local-face.h (module 'NDNabstraction'): ns3::CcnxLocalFace [class]
     module.add_class('CcnxLocalFace', parent=root_module['ns3::CcnxFace'])
+    ## ccnx-name-components.h (module 'NDNabstraction'): ns3::CcnxNameComponents [class]
+    module.add_class('CcnxNameComponents', parent=root_module['ns3::SimpleRefCount< ns3::CcnxNameComponents, ns3::empty, ns3::DefaultDeleter<ns3::CcnxNameComponents> >'])
+    ## ccnx-name-components.h (module 'NDNabstraction'): ns3::CcnxNameComponentsChecker [class]
+    module.add_class('CcnxNameComponentsChecker', parent=root_module['ns3::AttributeChecker'])
+    ## ccnx-name-components.h (module 'NDNabstraction'): ns3::CcnxNameComponentsValue [class]
+    module.add_class('CcnxNameComponentsValue', parent=root_module['ns3::AttributeValue'])
+    ## ccnx-net-device-face.h (module 'NDNabstraction'): ns3::CcnxNetDeviceFace [class]
+    module.add_class('CcnxNetDeviceFace', parent=root_module['ns3::CcnxFace'])
+    ## ccnx-pit.h (module 'NDNabstraction'): ns3::CcnxPit [class]
+    module.add_class('CcnxPit', parent=root_module['ns3::Object'])
+    ## ccnx-producer.h (module 'NDNabstraction'): ns3::CcnxProducer [class]
+    module.add_class('CcnxProducer', parent=root_module['ns3::Application'])
+    ## ccnx-rit.h (module 'NDNabstraction'): ns3::CcnxRit [class]
+    module.add_class('CcnxRit', parent=root_module['ns3::Object'])
     ## ccnx-route.h (module 'NDNabstraction'): ns3::CcnxRoute [class]
     module.add_class('CcnxRoute', parent=root_module['ns3::SimpleRefCount< ns3::CcnxRoute, ns3::empty, ns3::DefaultDeleter<ns3::CcnxRoute> >'])
+    ## data-rate.h (module 'network'): ns3::DataRateChecker [class]
+    module.add_class('DataRateChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## data-rate.h (module 'network'): ns3::DataRateValue [class]
+    module.add_class('DataRateValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue [class]
+    module.add_class('DropTailQueue', import_from_module='ns.network', parent=root_module['ns3::Queue'])
+    ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue::Mode [enumeration]
+    module.add_enum('Mode', ['ILLEGAL', 'PACKETS', 'BYTES'], outer_class=root_module['ns3::DropTailQueue'], import_from_module='ns.network')
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## event-impl.h (module 'core'): ns3::EventImpl [class]
@@ -308,6 +396,10 @@
     module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
+    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
+    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -324,10 +416,20 @@
     module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
+    ## point-to-point-net-device.h (module 'point-to-point'): ns3::PointToPointNetDevice [class]
+    module.add_class('PointToPointNetDevice', import_from_module='ns.point_to_point', parent=root_module['ns3::NetDevice'])
+    ## pointer.h (module 'core'): ns3::PointerChecker [class]
+    module.add_class('PointerChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## pointer.h (module 'core'): ns3::PointerValue [class]
+    module.add_class('PointerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## random-variable.h (module 'core'): ns3::RandomVariableChecker [class]
     module.add_class('RandomVariableChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## random-variable.h (module 'core'): ns3::RandomVariableValue [class]
     module.add_class('RandomVariableValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## string.h (module 'core'): ns3::StringChecker [class]
+    module.add_class('StringChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## string.h (module 'core'): ns3::StringValue [class]
+    module.add_class('StringValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## stupid-interest-generator.h (module 'NDNabstraction'): ns3::StupidInterestGenerator [class]
     module.add_class('StupidInterestGenerator', parent=root_module['ns3::Application'])
     ## stupid-interest-sink.h (module 'NDNabstraction'): ns3::StupidInterestSink [class]
@@ -340,11 +442,15 @@
     module.add_class('TypeIdChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## type-id.h (module 'core'): ns3::TypeIdValue [class]
     module.add_class('TypeIdValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## uinteger.h (module 'core'): ns3::UintegerValue [class]
+    module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## address.h (module 'network'): ns3::AddressChecker [class]
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     module.add_container('std::map< std::string, std::string >', ('std::string', 'std::string'), container_type='map')
+    module.add_container('std::list< boost::reference_wrapper< std::string const > >', 'boost::reference_wrapper< std::basic_string< char, std::char_traits< char >, std::allocator< char > > const >', container_type='list')
+    module.add_container('std::list< std::string >', 'std::string', container_type='list')
     module.add_container('std::list< ns3::Ptr< ns3::Socket > >', 'ns3::Ptr< ns3::Socket >', container_type='list')
     typehandlers.add_type_alias('void ( * ) ( std::ostream & ) *', 'ns3::LogNodePrinter')
     typehandlers.add_type_alias('void ( * ) ( std::ostream & ) **', 'ns3::LogNodePrinter*')
@@ -353,10 +459,10 @@
     typehandlers.add_type_alias('void ( * ) ( std::ostream & ) **', 'ns3::LogTimePrinter*')
     typehandlers.add_type_alias('void ( * ) ( std::ostream & ) *&', 'ns3::LogTimePrinter&')
     
-    ## Register a nested module for the namespace CcnxParser
+    ## Register a nested module for the namespace CcnbParser
     
-    nested_module = module.add_cpp_namespace('CcnxParser')
-    register_types_ns3_CcnxParser(nested_module)
+    nested_module = module.add_cpp_namespace('CcnbParser')
+    register_types_ns3_CcnbParser(nested_module)
     
     
     ## Register a nested module for the namespace FatalImpl
@@ -365,78 +471,79 @@
     register_types_ns3_FatalImpl(nested_module)
     
     
-    ## Register a nested module for the namespace Name
-    
-    nested_module = module.add_cpp_namespace('Name')
-    register_types_ns3_Name(nested_module)
-    
-    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
     register_types_ns3_internal(nested_module)
     
 
-def register_types_ns3_CcnxParser(module):
+def register_types_ns3_CcnbParser(module):
     root_module = module.get_root()
     
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Block [class]
-    module.add_class('Block', parent=root_module['ns3::SimpleRefCount< ns3::CcnxParser::Block, ns3::empty, ns3::DefaultDeleter<ns3::CcnxParser::Block> >'])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::CcnxDecodingException [class]
-    module.add_class('CcnxDecodingException')
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Dattr [class]
-    module.add_class('Dattr', parent=root_module['ns3::CcnxParser::Block'])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Dtag [class]
-    module.add_class('Dtag', parent=root_module['ns3::CcnxParser::Block'])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Ext [class]
-    module.add_class('Ext', parent=root_module['ns3::CcnxParser::Block'])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::GJNoArguVisitor [class]
-    module.add_class('GJNoArguVisitor', allow_subclassing=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::GJVisitor [class]
-    module.add_class('GJVisitor', allow_subclassing=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::GJVoidVisitor [class]
-    module.add_class('GJVoidVisitor', allow_subclassing=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Tag [class]
-    module.add_class('Tag', parent=root_module['ns3::CcnxParser::Block'])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Udata [class]
-    module.add_class('Udata', parent=root_module['ns3::CcnxParser::Block'])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Visitor [class]
+    ## ccnb-parser-common.h (module 'NDNabstraction'): ns3::CcnbParser::ccn_dtag [enumeration]
+    module.add_enum('ccn_dtag', ['CCN_DTAG_Any', 'CCN_DTAG_Name', 'CCN_DTAG_Component', 'CCN_DTAG_Certificate', 'CCN_DTAG_Collection', 'CCN_DTAG_CompleteName', 'CCN_DTAG_Content', 'CCN_DTAG_SignedInfo', 'CCN_DTAG_ContentDigest', 'CCN_DTAG_ContentHash', 'CCN_DTAG_Count', 'CCN_DTAG_Header', 'CCN_DTAG_Interest', 'CCN_DTAG_Key', 'CCN_DTAG_KeyLocator', 'CCN_DTAG_KeyName', 'CCN_DTAG_Length', 'CCN_DTAG_Link', 'CCN_DTAG_LinkAuthenticator', 'CCN_DTAG_NameComponentCount', 'CCN_DTAG_RootDigest', 'CCN_DTAG_Signature', 'CCN_DTAG_Start', 'CCN_DTAG_Timestamp', 'CCN_DTAG_Type', 'CCN_DTAG_Nonce', 'CCN_DTAG_Scope', 'CCN_DTAG_Exclude', 'CCN_DTAG_Bloom', 'CCN_DTAG_BloomSeed', 'CCN_DTAG_AnswerOriginKind', 'CCN_DTAG_InterestLifetime', 'CCN_DTAG_Witness', 'CCN_DTAG_SignatureBits', 'CCN_DTAG_DigestAlgorithm', 'CCN_DTAG_BlockSize', 'CCN_DTAG_FreshnessSeconds', 'CCN_DTAG_FinalBlockID', 'CCN_DTAG_PublisherPublicKeyDigest', 'CCN_DTAG_PublisherCertificateDigest', 'CCN_DTAG_PublisherIssuerKeyDigest', 'CCN_DTAG_PublisherIssuerCertificateDigest', 'CCN_DTAG_ContentObject', 'CCN_DTAG_WrappedKey', 'CCN_DTAG_WrappingKeyIdentifier', 'CCN_DTAG_WrapAlgorithm', 'CCN_DTAG_KeyAlgorithm', 'CCN_DTAG_Label', 'CCN_DTAG_EncryptedKey', 'CCN_DTAG_EncryptedNonceKey', 'CCN_DTAG_WrappingKeyName', 'CCN_DTAG_Action', 'CCN_DTAG_FaceID', 'CCN_DTAG_IPProto', 'CCN_DTAG_Host', 'CCN_DTAG_Port', 'CCN_DTAG_MulticastInterface', 'CCN_DTAG_ForwardingFlags', 'CCN_DTAG_FaceInstance', 'CCN_DTAG_ForwardingEntry', 'CCN_DTAG_MulticastTTL', 'CCN_DTAG_MinSuffixComponents', 'CCN_DTAG_MaxSuffixComponents', 'CCN_DTAG_ChildSelector', 'CCN_DTAG_RepositoryInfo', 'CCN_DTAG_Version', 'CCN_DTAG_RepositoryVersion', 'CCN_DTAG_GlobalPrefix', 'CCN_DTAG_LocalName', 'CCN_DTAG_Policy', 'CCN_DTAG_Namespace', 'CCN_DTAG_GlobalPrefixName', 'CCN_DTAG_PolicyVersion', 'CCN_DTAG_KeyValueSet', 'CCN_DTAG_KeyValuePair', 'CCN_DTAG_IntegerValue', 'CCN_DTAG_DecimalValue', 'CCN_DTAG_StringValue', 'CCN_DTAG_BinaryValue', 'CCN_DTAG_NameValue', 'CCN_DTAG_Entry', 'CCN_DTAG_ACL', 'CCN_DTAG_ParameterizedName', 'CCN_DTAG_Prefix', 'CCN_DTAG_Suffix', 'CCN_DTAG_Root', 'CCN_DTAG_ProfileName', 'CCN_DTAG_Parameters', 'CCN_DTAG_InfoString', 'CCN_DTAG_StatusResponse', 'CCN_DTAG_StatusCode', 'CCN_DTAG_StatusText', 'CCN_DTAG_SequenceNumber', 'CCN_DTAG_CCNProtocolDataUnit'])
+    ## ccnb-parser-common.h (module 'NDNabstraction'): ns3::CcnbParser [enumeration]
+    module.add_enum('', ['CCN_CLOSE'])
+    ## ccnb-parser-common.h (module 'NDNabstraction'): ns3::CcnbParser::ccn_tt [enumeration]
+    module.add_enum('ccn_tt', ['CCN_EXT', 'CCN_TAG', 'CCN_DTAG', 'CCN_ATTR', 'CCN_DATTR', 'CCN_BLOB', 'CCN_UDATA', 'CCN_NO_TOKEN'])
+    ## ccnb-parser-block.h (module 'NDNabstraction'): ns3::CcnbParser::Block [class]
+    module.add_class('Block', parent=root_module['ns3::SimpleRefCount< ns3::CcnbParser::Block, ns3::empty, ns3::DefaultDeleter<ns3::CcnbParser::Block> >'])
+    ## ccnb-parser-common.h (module 'NDNabstraction'): ns3::CcnbParser::CcnbDecodingException [class]
+    module.add_class('CcnbDecodingException')
+    ## ccnb-parser-ext.h (module 'NDNabstraction'): ns3::CcnbParser::Ext [class]
+    module.add_class('Ext', parent=root_module['ns3::CcnbParser::Block'])
+    ## ccnb-parser-no-argu-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::NoArguVisitor [class]
+    module.add_class('NoArguVisitor', allow_subclassing=True)
+    ## ccnb-parser-udata.h (module 'NDNabstraction'): ns3::CcnbParser::Udata [class]
+    module.add_class('Udata', parent=root_module['ns3::CcnbParser::Block'])
+    ## ccnb-parser-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::Visitor [class]
     module.add_class('Visitor', allow_subclassing=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Attr [class]
-    module.add_class('Attr', parent=root_module['ns3::CcnxParser::Block'])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Blob [class]
-    module.add_class('Blob', parent=root_module['ns3::CcnxParser::Block'])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::DepthFirstVisitor [class]
-    module.add_class('DepthFirstVisitor', parent=root_module['ns3::CcnxParser::Visitor'])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::GJDepthFirstVisitor [class]
-    module.add_class('GJDepthFirstVisitor', parent=root_module['ns3::CcnxParser::GJVisitor'])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::GJNoArguDepthFirstVisitor [class]
-    module.add_class('GJNoArguDepthFirstVisitor', parent=root_module['ns3::CcnxParser::GJNoArguVisitor'])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::GJVoidDepthFirstVisitor [class]
-    module.add_class('GJVoidDepthFirstVisitor', parent=root_module['ns3::CcnxParser::GJVoidVisitor'])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::InterestVisitor [class]
-    module.add_class('InterestVisitor', parent=root_module['ns3::CcnxParser::GJVoidDepthFirstVisitor'])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::NameComponentsVisitor [class]
-    module.add_class('NameComponentsVisitor', parent=root_module['ns3::CcnxParser::GJVoidDepthFirstVisitor'])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::NonNegativeIntegerVisitor [class]
-    module.add_class('NonNegativeIntegerVisitor', parent=root_module['ns3::CcnxParser::GJNoArguDepthFirstVisitor'])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::StringVisitor [class]
-    module.add_class('StringVisitor', parent=root_module['ns3::CcnxParser::GJNoArguDepthFirstVisitor'])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::ContentObjectVisitor [class]
-    module.add_class('ContentObjectVisitor', parent=root_module['ns3::CcnxParser::GJVoidDepthFirstVisitor'])
-    module.add_container('std::list< ns3::Ptr< ns3::CcnxParser::Block > >', 'ns3::Ptr< ns3::CcnxParser::Block >', container_type='list')
+    ## ccnb-parser-void-no-argu-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::VoidNoArguVisitor [class]
+    module.add_class('VoidNoArguVisitor', allow_subclassing=True)
+    ## ccnb-parser-void-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::VoidVisitor [class]
+    module.add_class('VoidVisitor', allow_subclassing=True)
+    ## ccnb-parser-base-attr.h (module 'NDNabstraction'): ns3::CcnbParser::BaseAttr [class]
+    module.add_class('BaseAttr', parent=root_module['ns3::CcnbParser::Block'])
+    ## ccnb-parser-base-tag.h (module 'NDNabstraction'): ns3::CcnbParser::BaseTag [class]
+    module.add_class('BaseTag', parent=root_module['ns3::CcnbParser::Block'])
+    ## ccnb-parser-blob.h (module 'NDNabstraction'): ns3::CcnbParser::Blob [class]
+    module.add_class('Blob', parent=root_module['ns3::CcnbParser::Block'])
+    ## ccnb-parser-dattr.h (module 'NDNabstraction'): ns3::CcnbParser::Dattr [class]
+    module.add_class('Dattr', parent=root_module['ns3::CcnbParser::BaseAttr'])
+    ## ccnb-parser-depth-first-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::DepthFirstVisitor [class]
+    module.add_class('DepthFirstVisitor', parent=root_module['ns3::CcnbParser::Visitor'])
+    ## ccnb-parser-dtag.h (module 'NDNabstraction'): ns3::CcnbParser::Dtag [class]
+    module.add_class('Dtag', parent=root_module['ns3::CcnbParser::BaseTag'])
+    ## ccnb-parser-no-argu-depth-first-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::NoArguDepthFirstVisitor [class]
+    module.add_class('NoArguDepthFirstVisitor', parent=root_module['ns3::CcnbParser::NoArguVisitor'])
+    ## ccnb-parser-non-negative-integer-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::NonNegativeIntegerVisitor [class]
+    module.add_class('NonNegativeIntegerVisitor', parent=root_module['ns3::CcnbParser::NoArguDepthFirstVisitor'])
+    ## ccnb-parser-nonce-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::NonceVisitor [class]
+    module.add_class('NonceVisitor', parent=root_module['ns3::CcnbParser::NoArguDepthFirstVisitor'])
+    ## ccnb-parser-string-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::StringVisitor [class]
+    module.add_class('StringVisitor', parent=root_module['ns3::CcnbParser::NoArguDepthFirstVisitor'])
+    ## ccnb-parser-tag.h (module 'NDNabstraction'): ns3::CcnbParser::Tag [class]
+    module.add_class('Tag', parent=root_module['ns3::CcnbParser::BaseTag'])
+    ## ccnb-parser-timestamp-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::TimestampVisitor [class]
+    module.add_class('TimestampVisitor', parent=root_module['ns3::CcnbParser::NoArguDepthFirstVisitor'])
+    ## ccnb-parser-void-depth-first-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::VoidDepthFirstVisitor [class]
+    module.add_class('VoidDepthFirstVisitor', parent=root_module['ns3::CcnbParser::VoidVisitor'])
+    ## ccnb-parser-void-no-argu-depth-first-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::VoidNoArguDepthFirstVisitor [class]
+    module.add_class('VoidNoArguDepthFirstVisitor', parent=root_module['ns3::CcnbParser::VoidNoArguVisitor'])
+    ## ccnb-parser-attr.h (module 'NDNabstraction'): ns3::CcnbParser::Attr [class]
+    module.add_class('Attr', parent=root_module['ns3::CcnbParser::BaseAttr'])
+    ## ccnb-parser-content-object-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::ContentObjectVisitor [class]
+    module.add_class('ContentObjectVisitor', parent=root_module['ns3::CcnbParser::VoidDepthFirstVisitor'])
+    ## ccnb-parser-interest-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::InterestVisitor [class]
+    module.add_class('InterestVisitor', parent=root_module['ns3::CcnbParser::VoidDepthFirstVisitor'])
+    ## ccnb-parser-name-components-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::NameComponentsVisitor [class]
+    module.add_class('NameComponentsVisitor', parent=root_module['ns3::CcnbParser::VoidDepthFirstVisitor'])
+    module.add_container('std::list< ns3::Ptr< ns3::CcnbParser::Block > >', 'ns3::Ptr< ns3::CcnbParser::Block >', container_type='list')
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
     
 
-def register_types_ns3_Name(module):
-    root_module = module.get_root()
-    
-    ## name-components.h (module 'NDNabstraction'): ns3::Name::Components [class]
-    module.add_class('Components', parent=root_module['ns3::SimpleRefCount< ns3::Name::Components, ns3::empty, ns3::DefaultDeleter<ns3::Name::Components> >'])
-    module.add_container('std::list< std::string >', 'std::string', container_type='list')
-
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -457,18 +564,42 @@
     register_Ns3ByteTagListIterator_methods(root_module, root_module['ns3::ByteTagList::Iterator'])
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
+    register_Ns3CcnxConsumerHelper_methods(root_module, root_module['ns3::CcnxConsumerHelper'])
+    register_Ns3CcnxContentStoreContainer_methods(root_module, root_module['ns3::CcnxContentStoreContainer'])
+    register_Ns3CcnxContentStoreEntry_methods(root_module, root_module['ns3::CcnxContentStoreEntry'])
     register_Ns3CcnxDecodingHelper_methods(root_module, root_module['ns3::CcnxDecodingHelper'])
     register_Ns3CcnxEncodingHelper_methods(root_module, root_module['ns3::CcnxEncodingHelper'])
-    register_Ns3CcnxFaceContainer_methods(root_module, root_module['ns3::CcnxFaceContainer'])
+    register_Ns3CcnxFib_methods(root_module, root_module['ns3::CcnxFib'])
+    register_Ns3CcnxFibEntryContainer_methods(root_module, root_module['ns3::CcnxFibEntryContainer'])
+    register_Ns3CcnxFibFaceMetric_methods(root_module, root_module['ns3::CcnxFibFaceMetric'])
+    register_Ns3CcnxFibFaceMetricContainer_methods(root_module, root_module['ns3::CcnxFibFaceMetricContainer'])
     register_Ns3CcnxForwardingHelper_methods(root_module, root_module['ns3::CcnxForwardingHelper'])
     register_Ns3CcnxHeaderHelper_methods(root_module, root_module['ns3::CcnxHeaderHelper'])
+    register_Ns3CcnxInterestSenderHelper_methods(root_module, root_module['ns3::CcnxInterestSenderHelper'])
+    register_Ns3CcnxPitEntry_methods(root_module, root_module['ns3::CcnxPitEntry'])
+    register_Ns3CcnxPitEntryAddIncoming_methods(root_module, root_module['ns3::CcnxPitEntry::AddIncoming'])
+    register_Ns3CcnxPitEntryAddOutgoing_methods(root_module, root_module['ns3::CcnxPitEntry::AddOutgoing'])
+    register_Ns3CcnxPitEntryClearIncoming_methods(root_module, root_module['ns3::CcnxPitEntry::ClearIncoming'])
+    register_Ns3CcnxPitEntryDeleteIncoming_methods(root_module, root_module['ns3::CcnxPitEntry::DeleteIncoming'])
+    register_Ns3CcnxPitEntrySetFibEntry_methods(root_module, root_module['ns3::CcnxPitEntry::SetFibEntry'])
+    register_Ns3CcnxPitEntryContainer_methods(root_module, root_module['ns3::CcnxPitEntryContainer'])
+    register_Ns3CcnxPitEntryIncomingFace_methods(root_module, root_module['ns3::CcnxPitEntryIncomingFace'])
+    register_Ns3CcnxPitEntryIncomingFaceContainer_methods(root_module, root_module['ns3::CcnxPitEntryIncomingFaceContainer'])
+    register_Ns3CcnxPitEntryNotFound_methods(root_module, root_module['ns3::CcnxPitEntryNotFound'])
+    register_Ns3CcnxPitEntryOutgoingFace_methods(root_module, root_module['ns3::CcnxPitEntryOutgoingFace'])
+    register_Ns3CcnxPitEntryOutgoingFaceContainer_methods(root_module, root_module['ns3::CcnxPitEntryOutgoingFaceContainer'])
+    register_Ns3CcnxProducerHelper_methods(root_module, root_module['ns3::CcnxProducerHelper'])
+    register_Ns3CcnxRitContainer_methods(root_module, root_module['ns3::CcnxRitContainer'])
+    register_Ns3CcnxRitEntry_methods(root_module, root_module['ns3::CcnxRitEntry'])
     register_Ns3CcnxUnknownHeaderException_methods(root_module, root_module['ns3::CcnxUnknownHeaderException'])
+    register_Ns3DataRate_methods(root_module, root_module['ns3::DataRate'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
     register_Ns3LogComponent_methods(root_module, root_module['ns3::LogComponent'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
@@ -485,6 +616,7 @@
     register_Ns3PcapHelper_methods(root_module, root_module['ns3::PcapHelper'])
     register_Ns3PcapHelperForCcnx_methods(root_module, root_module['ns3::PcapHelperForCcnx'])
     register_Ns3PcapHelperForDevice_methods(root_module, root_module['ns3::PcapHelperForDevice'])
+    register_Ns3PointToPointHelper_methods(root_module, root_module['ns3::PointToPointHelper'])
     register_Ns3RandomVariable_methods(root_module, root_module['ns3::RandomVariable'])
     register_Ns3SeedManager_methods(root_module, root_module['ns3::SeedManager'])
     register_Ns3SequentialVariable_methods(root_module, root_module['ns3::SequentialVariable'])
@@ -520,14 +652,17 @@
     register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
     register_Ns3ParetoVariable_methods(root_module, root_module['ns3::ParetoVariable'])
     register_Ns3PcapFileWrapper_methods(root_module, root_module['ns3::PcapFileWrapper'])
+    register_Ns3Queue_methods(root_module, root_module['ns3::Queue'])
     register_Ns3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >'])
     register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
-    register_Ns3SimpleRefCount__Ns3CcnxParserBlock_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxParserBlock__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CcnxParser::Block, ns3::empty, ns3::DefaultDeleter<ns3::CcnxParser::Block> >'])
+    register_Ns3SimpleRefCount__Ns3CcnbParserBlock_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnbParserBlock__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CcnbParser::Block, ns3::empty, ns3::DefaultDeleter<ns3::CcnbParser::Block> >'])
+    register_Ns3SimpleRefCount__Ns3CcnxFaceContainer_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxFaceContainer__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CcnxFaceContainer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxFaceContainer> >'])
+    register_Ns3SimpleRefCount__Ns3CcnxFibEntry_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxFibEntry__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CcnxFibEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxFibEntry> >'])
+    register_Ns3SimpleRefCount__Ns3CcnxNameComponents_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxNameComponents__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CcnxNameComponents, ns3::empty, ns3::DefaultDeleter<ns3::CcnxNameComponents> >'])
     register_Ns3SimpleRefCount__Ns3CcnxRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CcnxRoute, ns3::empty, ns3::DefaultDeleter<ns3::CcnxRoute> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
-    register_Ns3SimpleRefCount__Ns3NameComponents_Ns3Empty_Ns3DefaultDeleter__lt__ns3NameComponents__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Name::Components, ns3::empty, ns3::DefaultDeleter<ns3::Name::Components> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
@@ -548,18 +683,35 @@
     register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
     register_Ns3AttributeChecker_methods(root_module, root_module['ns3::AttributeChecker'])
     register_Ns3AttributeValue_methods(root_module, root_module['ns3::AttributeValue'])
+    register_Ns3BooleanChecker_methods(root_module, root_module['ns3::BooleanChecker'])
+    register_Ns3BooleanValue_methods(root_module, root_module['ns3::BooleanValue'])
     register_Ns3CallbackChecker_methods(root_module, root_module['ns3::CallbackChecker'])
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3Ccnx_methods(root_module, root_module['ns3::Ccnx'])
+    register_Ns3CcnxConsumer_methods(root_module, root_module['ns3::CcnxConsumer'])
     register_Ns3CcnxContentObjectHeader_methods(root_module, root_module['ns3::CcnxContentObjectHeader'])
     register_Ns3CcnxContentObjectTail_methods(root_module, root_module['ns3::CcnxContentObjectTail'])
+    register_Ns3CcnxContentStore_methods(root_module, root_module['ns3::CcnxContentStore'])
     register_Ns3CcnxFace_methods(root_module, root_module['ns3::CcnxFace'])
+    register_Ns3CcnxFaceContainer_methods(root_module, root_module['ns3::CcnxFaceContainer'])
+    register_Ns3CcnxFibEntry_methods(root_module, root_module['ns3::CcnxFibEntry'])
     register_Ns3CcnxForwardingStrategy_methods(root_module, root_module['ns3::CcnxForwardingStrategy'])
     register_Ns3CcnxInterestHeader_methods(root_module, root_module['ns3::CcnxInterestHeader'])
+    register_Ns3CcnxInterestSender_methods(root_module, root_module['ns3::CcnxInterestSender'])
     register_Ns3CcnxL3Protocol_methods(root_module, root_module['ns3::CcnxL3Protocol'])
     register_Ns3CcnxLocalFace_methods(root_module, root_module['ns3::CcnxLocalFace'])
+    register_Ns3CcnxNameComponents_methods(root_module, root_module['ns3::CcnxNameComponents'])
+    register_Ns3CcnxNameComponentsChecker_methods(root_module, root_module['ns3::CcnxNameComponentsChecker'])
+    register_Ns3CcnxNameComponentsValue_methods(root_module, root_module['ns3::CcnxNameComponentsValue'])
+    register_Ns3CcnxNetDeviceFace_methods(root_module, root_module['ns3::CcnxNetDeviceFace'])
+    register_Ns3CcnxPit_methods(root_module, root_module['ns3::CcnxPit'])
+    register_Ns3CcnxProducer_methods(root_module, root_module['ns3::CcnxProducer'])
+    register_Ns3CcnxRit_methods(root_module, root_module['ns3::CcnxRit'])
     register_Ns3CcnxRoute_methods(root_module, root_module['ns3::CcnxRoute'])
+    register_Ns3DataRateChecker_methods(root_module, root_module['ns3::DataRateChecker'])
+    register_Ns3DataRateValue_methods(root_module, root_module['ns3::DataRateValue'])
+    register_Ns3DropTailQueue_methods(root_module, root_module['ns3::DropTailQueue'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
@@ -571,6 +723,8 @@
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
+    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
+    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -578,46 +732,55 @@
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
+    register_Ns3PointToPointNetDevice_methods(root_module, root_module['ns3::PointToPointNetDevice'])
+    register_Ns3PointerChecker_methods(root_module, root_module['ns3::PointerChecker'])
+    register_Ns3PointerValue_methods(root_module, root_module['ns3::PointerValue'])
     register_Ns3RandomVariableChecker_methods(root_module, root_module['ns3::RandomVariableChecker'])
     register_Ns3RandomVariableValue_methods(root_module, root_module['ns3::RandomVariableValue'])
+    register_Ns3StringChecker_methods(root_module, root_module['ns3::StringChecker'])
+    register_Ns3StringValue_methods(root_module, root_module['ns3::StringValue'])
     register_Ns3StupidInterestGenerator_methods(root_module, root_module['ns3::StupidInterestGenerator'])
     register_Ns3StupidInterestSink_methods(root_module, root_module['ns3::StupidInterestSink'])
     register_Ns3TimeChecker_methods(root_module, root_module['ns3::TimeChecker'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
+    register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
-    register_Ns3CcnxParserBlock_methods(root_module, root_module['ns3::CcnxParser::Block'])
-    register_Ns3CcnxParserCcnxDecodingException_methods(root_module, root_module['ns3::CcnxParser::CcnxDecodingException'])
-    register_Ns3CcnxParserDattr_methods(root_module, root_module['ns3::CcnxParser::Dattr'])
-    register_Ns3CcnxParserDtag_methods(root_module, root_module['ns3::CcnxParser::Dtag'])
-    register_Ns3CcnxParserExt_methods(root_module, root_module['ns3::CcnxParser::Ext'])
-    register_Ns3CcnxParserGJNoArguVisitor_methods(root_module, root_module['ns3::CcnxParser::GJNoArguVisitor'])
-    register_Ns3CcnxParserGJVisitor_methods(root_module, root_module['ns3::CcnxParser::GJVisitor'])
-    register_Ns3CcnxParserGJVoidVisitor_methods(root_module, root_module['ns3::CcnxParser::GJVoidVisitor'])
-    register_Ns3CcnxParserTag_methods(root_module, root_module['ns3::CcnxParser::Tag'])
-    register_Ns3CcnxParserUdata_methods(root_module, root_module['ns3::CcnxParser::Udata'])
-    register_Ns3CcnxParserVisitor_methods(root_module, root_module['ns3::CcnxParser::Visitor'])
-    register_Ns3CcnxParserAttr_methods(root_module, root_module['ns3::CcnxParser::Attr'])
-    register_Ns3CcnxParserBlob_methods(root_module, root_module['ns3::CcnxParser::Blob'])
-    register_Ns3CcnxParserDepthFirstVisitor_methods(root_module, root_module['ns3::CcnxParser::DepthFirstVisitor'])
-    register_Ns3CcnxParserGJDepthFirstVisitor_methods(root_module, root_module['ns3::CcnxParser::GJDepthFirstVisitor'])
-    register_Ns3CcnxParserGJNoArguDepthFirstVisitor_methods(root_module, root_module['ns3::CcnxParser::GJNoArguDepthFirstVisitor'])
-    register_Ns3CcnxParserGJVoidDepthFirstVisitor_methods(root_module, root_module['ns3::CcnxParser::GJVoidDepthFirstVisitor'])
-    register_Ns3CcnxParserInterestVisitor_methods(root_module, root_module['ns3::CcnxParser::InterestVisitor'])
-    register_Ns3CcnxParserNameComponentsVisitor_methods(root_module, root_module['ns3::CcnxParser::NameComponentsVisitor'])
-    register_Ns3CcnxParserNonNegativeIntegerVisitor_methods(root_module, root_module['ns3::CcnxParser::NonNegativeIntegerVisitor'])
-    register_Ns3CcnxParserStringVisitor_methods(root_module, root_module['ns3::CcnxParser::StringVisitor'])
-    register_Ns3CcnxParserContentObjectVisitor_methods(root_module, root_module['ns3::CcnxParser::ContentObjectVisitor'])
-    register_Ns3NameComponents_methods(root_module, root_module['ns3::Name::Components'])
+    register_Ns3CcnbParserBlock_methods(root_module, root_module['ns3::CcnbParser::Block'])
+    register_Ns3CcnbParserCcnbDecodingException_methods(root_module, root_module['ns3::CcnbParser::CcnbDecodingException'])
+    register_Ns3CcnbParserExt_methods(root_module, root_module['ns3::CcnbParser::Ext'])
+    register_Ns3CcnbParserNoArguVisitor_methods(root_module, root_module['ns3::CcnbParser::NoArguVisitor'])
+    register_Ns3CcnbParserUdata_methods(root_module, root_module['ns3::CcnbParser::Udata'])
+    register_Ns3CcnbParserVisitor_methods(root_module, root_module['ns3::CcnbParser::Visitor'])
+    register_Ns3CcnbParserVoidNoArguVisitor_methods(root_module, root_module['ns3::CcnbParser::VoidNoArguVisitor'])
+    register_Ns3CcnbParserVoidVisitor_methods(root_module, root_module['ns3::CcnbParser::VoidVisitor'])
+    register_Ns3CcnbParserBaseAttr_methods(root_module, root_module['ns3::CcnbParser::BaseAttr'])
+    register_Ns3CcnbParserBaseTag_methods(root_module, root_module['ns3::CcnbParser::BaseTag'])
+    register_Ns3CcnbParserBlob_methods(root_module, root_module['ns3::CcnbParser::Blob'])
+    register_Ns3CcnbParserDattr_methods(root_module, root_module['ns3::CcnbParser::Dattr'])
+    register_Ns3CcnbParserDepthFirstVisitor_methods(root_module, root_module['ns3::CcnbParser::DepthFirstVisitor'])
+    register_Ns3CcnbParserDtag_methods(root_module, root_module['ns3::CcnbParser::Dtag'])
+    register_Ns3CcnbParserNoArguDepthFirstVisitor_methods(root_module, root_module['ns3::CcnbParser::NoArguDepthFirstVisitor'])
+    register_Ns3CcnbParserNonNegativeIntegerVisitor_methods(root_module, root_module['ns3::CcnbParser::NonNegativeIntegerVisitor'])
+    register_Ns3CcnbParserNonceVisitor_methods(root_module, root_module['ns3::CcnbParser::NonceVisitor'])
+    register_Ns3CcnbParserStringVisitor_methods(root_module, root_module['ns3::CcnbParser::StringVisitor'])
+    register_Ns3CcnbParserTag_methods(root_module, root_module['ns3::CcnbParser::Tag'])
+    register_Ns3CcnbParserTimestampVisitor_methods(root_module, root_module['ns3::CcnbParser::TimestampVisitor'])
+    register_Ns3CcnbParserVoidDepthFirstVisitor_methods(root_module, root_module['ns3::CcnbParser::VoidDepthFirstVisitor'])
+    register_Ns3CcnbParserVoidNoArguDepthFirstVisitor_methods(root_module, root_module['ns3::CcnbParser::VoidNoArguDepthFirstVisitor'])
+    register_Ns3CcnbParserAttr_methods(root_module, root_module['ns3::CcnbParser::Attr'])
+    register_Ns3CcnbParserContentObjectVisitor_methods(root_module, root_module['ns3::CcnbParser::ContentObjectVisitor'])
+    register_Ns3CcnbParserInterestVisitor_methods(root_module, root_module['ns3::CcnbParser::InterestVisitor'])
+    register_Ns3CcnbParserNameComponentsVisitor_methods(root_module, root_module['ns3::CcnbParser::NameComponentsVisitor'])
     return
 
 def register_Ns3Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
-    cls.add_binary_comparison_operator('<')
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
+    cls.add_binary_comparison_operator('<')
     ## address.h (module 'network'): ns3::Address::Address() [constructor]
     cls.add_constructor([])
     ## address.h (module 'network'): ns3::Address::Address(uint8_t type, uint8_t const * buffer, uint8_t len) [constructor]
@@ -743,42 +906,42 @@
     cls.add_method('CreateFileStream', 
                    'ns3::Ptr< ns3::OutputStreamWrapper >', 
                    [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode', default_value='std::ios_base::out')])
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDequeueSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDequeueSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDropSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultDropSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultEnqueueSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultEnqueueSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultReceiveSinkWithContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
                    is_static=True)
-    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('DefaultReceiveSinkWithoutContext', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
@@ -1329,6 +1492,63 @@
                    is_static=True, visibility='protected')
     return
 
+def register_Ns3CcnxConsumerHelper_methods(root_module, cls):
+    ## ccnx-consumer-helper.h (module 'NDNabstraction'): ns3::CcnxConsumerHelper::CcnxConsumerHelper(ns3::CcnxConsumerHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxConsumerHelper const &', 'arg0')])
+    ## ccnx-consumer-helper.h (module 'NDNabstraction'): ns3::CcnxConsumerHelper::CcnxConsumerHelper(ns3::Ptr<ns3::CcnxNameComponents> interestName) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::CcnxNameComponents >', 'interestName')])
+    ## ccnx-consumer-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxConsumerHelper::Install(ns3::NodeContainer c) [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('ns3::NodeContainer', 'c')])
+    ## ccnx-consumer-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxConsumerHelper::Install(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## ccnx-consumer-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxConsumerHelper::Install(std::string nodeName) [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('std::string', 'nodeName')])
+    ## ccnx-consumer-helper.h (module 'NDNabstraction'): void ns3::CcnxConsumerHelper::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
+    cls.add_method('SetAttribute', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    return
+
+def register_Ns3CcnxContentStoreContainer_methods(root_module, cls):
+    ## ccnx-content-store.h (module 'NDNabstraction'): ns3::CcnxContentStoreContainer::CcnxContentStoreContainer() [constructor]
+    cls.add_constructor([])
+    ## ccnx-content-store.h (module 'NDNabstraction'): ns3::CcnxContentStoreContainer::CcnxContentStoreContainer(ns3::CcnxContentStoreContainer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxContentStoreContainer const &', 'arg0')])
+    return
+
+def register_Ns3CcnxContentStoreEntry_methods(root_module, cls):
+    ## ccnx-content-store.h (module 'NDNabstraction'): ns3::CcnxContentStoreEntry::CcnxContentStoreEntry(ns3::CcnxContentStoreEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxContentStoreEntry const &', 'arg0')])
+    ## ccnx-content-store.h (module 'NDNabstraction'): ns3::CcnxContentStoreEntry::CcnxContentStoreEntry(ns3::Ptr<ns3::CcnxContentObjectHeader> header, ns3::Ptr<ns3::Packet const> packet) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::CcnxContentObjectHeader >', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## ccnx-content-store.h (module 'NDNabstraction'): ns3::Ptr<ns3::Packet> ns3::CcnxContentStoreEntry::GetFullyFormedCcnxPacket() const [member function]
+    cls.add_method('GetFullyFormedCcnxPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## ccnx-content-store.h (module 'NDNabstraction'): ns3::Ptr<ns3::CcnxContentObjectHeader const> ns3::CcnxContentStoreEntry::GetHeader() const [member function]
+    cls.add_method('GetHeader', 
+                   'ns3::Ptr< ns3::CcnxContentObjectHeader const >', 
+                   [], 
+                   is_const=True)
+    ## ccnx-content-store.h (module 'NDNabstraction'): ns3::CcnxNameComponents const & ns3::CcnxContentStoreEntry::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'ns3::CcnxNameComponents const &', 
+                   [], 
+                   is_const=True)
+    ## ccnx-content-store.h (module 'NDNabstraction'): ns3::Ptr<ns3::Packet const> ns3::CcnxContentStoreEntry::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [], 
+                   is_const=True)
+    return
+
 def register_Ns3CcnxDecodingHelper_methods(root_module, cls):
     ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxDecodingHelper::CcnxDecodingHelper() [constructor]
     cls.add_constructor([])
@@ -1363,43 +1583,55 @@
                    is_static=True)
     return
 
-def register_Ns3CcnxFaceContainer_methods(root_module, cls):
-    ## ccnx-face-container.h (module 'NDNabstraction'): ns3::CcnxFaceContainer::CcnxFaceContainer() [constructor]
+def register_Ns3CcnxFib_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFib::CcnxFib(ns3::CcnxFib const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxFib const &', 'arg0')])
+    ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFib::CcnxFib(ns3::Ptr<ns3::Ccnx> node) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Ccnx >', 'node')])
+    ## ccnx-fib.h (module 'NDNabstraction'): std::pair<boost::multi_index::detail::hashed_index_iterator<boost::multi_index::detail::hashed_index_node<boost::multi_index::detail::index_node_base<ns3::CcnxFibEntry, std::allocator<ns3::CcnxFibEntry> > >, boost::multi_index::detail::bucket_array<std::allocator<ns3::CcnxFibEntry> > >,bool> ns3::CcnxFib::LongestPrefixMatch(ns3::CcnxInterestHeader const & interest) const [member function]
+    cls.add_method('LongestPrefixMatch', 
+                   'std::pair< boost::multi_index::detail::hashed_index_iterator< boost::multi_index::detail::hashed_index_node< boost::multi_index::detail::index_node_base< ns3::CcnxFibEntry, std::allocator< ns3::CcnxFibEntry > > >, boost::multi_index::detail::bucket_array< std::allocator< ns3::CcnxFibEntry > > >, bool >', 
+                   [param('ns3::CcnxInterestHeader const &', 'interest')], 
+                   is_const=True)
+    return
+
+def register_Ns3CcnxFibEntryContainer_methods(root_module, cls):
+    ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibEntryContainer::CcnxFibEntryContainer() [constructor]
     cls.add_constructor([])
-    ## ccnx-face-container.h (module 'NDNabstraction'): ns3::CcnxFaceContainer::CcnxFaceContainer(ns3::CcnxFaceContainer const & other) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxFaceContainer const &', 'other')])
-    ## ccnx-face-container.h (module 'NDNabstraction'): void ns3::CcnxFaceContainer::Add(ns3::Ptr<ns3::CcnxFace> const & face) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::CcnxFace > const &', 'face')])
-    ## ccnx-face-container.h (module 'NDNabstraction'): void ns3::CcnxFaceContainer::AddAll(ns3::CcnxFaceContainer const & other) [member function]
-    cls.add_method('AddAll', 
-                   'void', 
-                   [param('ns3::CcnxFaceContainer const &', 'other')])
-    ## ccnx-face-container.h (module 'NDNabstraction'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::CcnxFace>*,std::vector<ns3::Ptr<ns3::CcnxFace>, std::allocator<ns3::Ptr<ns3::CcnxFace> > > > ns3::CcnxFaceContainer::Begin() const [member function]
-    cls.add_method('Begin', 
-                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::CcnxFace > const, std::vector< ns3::Ptr< ns3::CcnxFace > > >', 
-                   [], 
-                   is_const=True)
-    ## ccnx-face-container.h (module 'NDNabstraction'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::CcnxFace>*,std::vector<ns3::Ptr<ns3::CcnxFace>, std::allocator<ns3::Ptr<ns3::CcnxFace> > > > ns3::CcnxFaceContainer::End() const [member function]
-    cls.add_method('End', 
-                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::CcnxFace > const, std::vector< ns3::Ptr< ns3::CcnxFace > > >', 
-                   [], 
-                   is_const=True)
-    ## ccnx-face-container.h (module 'NDNabstraction'): ns3::Ptr<ns3::CcnxFace> ns3::CcnxFaceContainer::Get(__gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::CcnxFace>*,std::vector<ns3::Ptr<ns3::CcnxFace>, std::allocator<ns3::Ptr<ns3::CcnxFace> > > > i) const [member function]
-    cls.add_method('Get', 
+    ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibEntryContainer::CcnxFibEntryContainer(ns3::CcnxFibEntryContainer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxFibEntryContainer const &', 'arg0')])
+    return
+
+def register_Ns3CcnxFibFaceMetric_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('<')
+    ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibFaceMetric::CcnxFibFaceMetric(ns3::CcnxFibFaceMetric const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxFibFaceMetric const &', 'arg0')])
+    ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibFaceMetric::CcnxFibFaceMetric(ns3::Ptr<ns3::CcnxFace> face, int cost) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::CcnxFace >', 'face'), param('int', 'cost')])
+    ## ccnx-fib.h (module 'NDNabstraction'): ns3::Ptr<ns3::CcnxFace> ns3::CcnxFibFaceMetric::GetFace() const [member function]
+    cls.add_method('GetFace', 
                    'ns3::Ptr< ns3::CcnxFace >', 
-                   [param('__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::CcnxFace > const, std::vector< ns3::Ptr< ns3::CcnxFace > > >', 'i')], 
-                   is_const=True)
-    ## ccnx-face-container.h (module 'NDNabstraction'): uint32_t ns3::CcnxFaceContainer::GetN() const [member function]
-    cls.add_method('GetN', 
-                   'uint32_t', 
                    [], 
                    is_const=True)
-    ## ccnx-face-container.h (module 'NDNabstraction'): void ns3::CcnxFaceContainer::SetMetricToAll(uint16_t metric) [member function]
-    cls.add_method('SetMetricToAll', 
-                   'void', 
-                   [param('uint16_t', 'metric')])
+    ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibFaceMetric::m_face [variable]
+    cls.add_instance_attribute('m_face', 'ns3::Ptr< ns3::CcnxFace >', is_const=False)
+    ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibFaceMetric::m_routingCost [variable]
+    cls.add_instance_attribute('m_routingCost', 'uint32_t', is_const=False)
+    ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibFaceMetric::m_rttVar [variable]
+    cls.add_instance_attribute('m_rttVar', 'ns3::Time', is_const=False)
+    ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibFaceMetric::m_sRtt [variable]
+    cls.add_instance_attribute('m_sRtt', 'ns3::Time', is_const=False)
+    ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibFaceMetric::m_status [variable]
+    cls.add_instance_attribute('m_status', 'uint8_t', is_const=False)
+    return
+
+def register_Ns3CcnxFibFaceMetricContainer_methods(root_module, cls):
+    ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibFaceMetricContainer::CcnxFibFaceMetricContainer() [constructor]
+    cls.add_constructor([])
+    ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibFaceMetricContainer::CcnxFibFaceMetricContainer(ns3::CcnxFibFaceMetricContainer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxFibFaceMetricContainer const &', 'arg0')])
     return
 
 def register_Ns3CcnxForwardingHelper_methods(root_module, cls):
@@ -1444,13 +1676,211 @@
     cls.add_constructor([])
     ## ccnx-header-helper.h (module 'NDNabstraction'): ns3::CcnxHeaderHelper::CcnxHeaderHelper(ns3::CcnxHeaderHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CcnxHeaderHelper const &', 'arg0')])
-    ## ccnx-header-helper.h (module 'NDNabstraction'): static ns3::Ptr<ns3::Header> ns3::CcnxHeaderHelper::CreateCorrectCcnxHeader(ns3::Ptr<const ns3::Packet> packet) [member function]
+    ## ccnx-header-helper.h (module 'NDNabstraction'): static ns3::Ptr<ns3::Header> ns3::CcnxHeaderHelper::CreateCorrectCcnxHeader(ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('CreateCorrectCcnxHeader', 
                    'ns3::Ptr< ns3::Header >', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet')], 
                    is_static=True)
     return
 
+def register_Ns3CcnxInterestSenderHelper_methods(root_module, cls):
+    ## ccnx-interest-sender-helper.h (module 'NDNabstraction'): ns3::CcnxInterestSenderHelper::CcnxInterestSenderHelper(ns3::CcnxInterestSenderHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxInterestSenderHelper const &', 'arg0')])
+    ## ccnx-interest-sender-helper.h (module 'NDNabstraction'): ns3::CcnxInterestSenderHelper::CcnxInterestSenderHelper(ns3::Ptr<ns3::CcnxNameComponents> interestName) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::CcnxNameComponents >', 'interestName')])
+    ## ccnx-interest-sender-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxInterestSenderHelper::Install(ns3::NodeContainer c) [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('ns3::NodeContainer', 'c')])
+    ## ccnx-interest-sender-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxInterestSenderHelper::Install(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## ccnx-interest-sender-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxInterestSenderHelper::Install(std::string nodeName) [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('std::string', 'nodeName')])
+    ## ccnx-interest-sender-helper.h (module 'NDNabstraction'): void ns3::CcnxInterestSenderHelper::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
+    cls.add_method('SetAttribute', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    return
+
+def register_Ns3CcnxPitEntry_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxPitEntry::CcnxPitEntry(ns3::CcnxPitEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxPitEntry const &', 'arg0')])
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxPitEntry::CcnxPitEntry(ns3::Ptr<ns3::CcnxNameComponents> prefix) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::CcnxNameComponents >', 'prefix')])
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::Time const & ns3::CcnxPitEntry::GetExpireTime() const [member function]
+    cls.add_method('GetExpireTime', 
+                   'ns3::Time const &', 
+                   [], 
+                   is_const=True)
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxNameComponents const & ns3::CcnxPitEntry::GetPrefix() const [member function]
+    cls.add_method('GetPrefix', 
+                   'ns3::CcnxNameComponents const &', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_Ns3CcnxPitEntryAddIncoming_methods(root_module, cls):
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxPitEntry::AddIncoming::AddIncoming(ns3::CcnxPitEntry::AddIncoming const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxPitEntry::AddIncoming const &', 'arg0')])
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxPitEntry::AddIncoming::AddIncoming(ns3::Ptr<ns3::CcnxFace> incomingFace) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::CcnxFace >', 'incomingFace')])
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): void ns3::CcnxPitEntry::AddIncoming::operator()(ns3::CcnxPitEntry & entry) [member operator]
+    cls.add_method('operator()', 
+                   'void', 
+                   [param('ns3::CcnxPitEntry &', 'entry')], 
+                   custom_name='__call__')
+    return
+
+def register_Ns3CcnxPitEntryAddOutgoing_methods(root_module, cls):
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxPitEntry::AddOutgoing::AddOutgoing(ns3::CcnxPitEntry::AddOutgoing const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxPitEntry::AddOutgoing const &', 'arg0')])
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxPitEntry::AddOutgoing::AddOutgoing(ns3::Ptr<ns3::CcnxFace> outgoingFace) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::CcnxFace >', 'outgoingFace')])
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): void ns3::CcnxPitEntry::AddOutgoing::operator()(ns3::CcnxPitEntry & entry) [member operator]
+    cls.add_method('operator()', 
+                   'void', 
+                   [param('ns3::CcnxPitEntry &', 'entry')], 
+                   custom_name='__call__')
+    return
+
+def register_Ns3CcnxPitEntryClearIncoming_methods(root_module, cls):
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxPitEntry::ClearIncoming::ClearIncoming(ns3::CcnxPitEntry::ClearIncoming const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxPitEntry::ClearIncoming const &', 'arg0')])
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxPitEntry::ClearIncoming::ClearIncoming() [constructor]
+    cls.add_constructor([])
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): void ns3::CcnxPitEntry::ClearIncoming::operator()(ns3::CcnxPitEntry & entry) [member operator]
+    cls.add_method('operator()', 
+                   'void', 
+                   [param('ns3::CcnxPitEntry &', 'entry')], 
+                   custom_name='__call__')
+    return
+
+def register_Ns3CcnxPitEntryDeleteIncoming_methods(root_module, cls):
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxPitEntry::DeleteIncoming::DeleteIncoming(ns3::CcnxPitEntry::DeleteIncoming const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxPitEntry::DeleteIncoming const &', 'arg0')])
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxPitEntry::DeleteIncoming::DeleteIncoming(ns3::Ptr<ns3::CcnxFace> face) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::CcnxFace >', 'face')])
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): void ns3::CcnxPitEntry::DeleteIncoming::operator()(ns3::CcnxPitEntry & entry) [member operator]
+    cls.add_method('operator()', 
+                   'void', 
+                   [param('ns3::CcnxPitEntry &', 'entry')], 
+                   custom_name='__call__')
+    return
+
+def register_Ns3CcnxPitEntrySetFibEntry_methods(root_module, cls):
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxPitEntry::SetFibEntry::SetFibEntry(ns3::CcnxPitEntry::SetFibEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxPitEntry::SetFibEntry const &', 'arg0')])
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxPitEntry::SetFibEntry::SetFibEntry(ns3::Ptr<ns3::CcnxFibEntry> fib) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::CcnxFibEntry >', 'fib')])
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): void ns3::CcnxPitEntry::SetFibEntry::operator()(ns3::CcnxPitEntry & entry) [member operator]
+    cls.add_method('operator()', 
+                   'void', 
+                   [param('ns3::CcnxPitEntry &', 'entry')], 
+                   custom_name='__call__')
+    return
+
+def register_Ns3CcnxPitEntryContainer_methods(root_module, cls):
+    ## ccnx-pit.h (module 'NDNabstraction'): ns3::CcnxPitEntryContainer::CcnxPitEntryContainer() [constructor]
+    cls.add_constructor([])
+    ## ccnx-pit.h (module 'NDNabstraction'): ns3::CcnxPitEntryContainer::CcnxPitEntryContainer(ns3::CcnxPitEntryContainer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxPitEntryContainer const &', 'arg0')])
+    return
+
+def register_Ns3CcnxPitEntryIncomingFace_methods(root_module, cls):
+    cls.add_binary_comparison_operator('==')
+    cls.add_binary_comparison_operator('<')
+    ## ccnx-pit-entry-incoming-face.h (module 'NDNabstraction'): ns3::CcnxPitEntryIncomingFace::CcnxPitEntryIncomingFace(ns3::CcnxPitEntryIncomingFace const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxPitEntryIncomingFace const &', 'arg0')])
+    ## ccnx-pit-entry-incoming-face.h (module 'NDNabstraction'): ns3::CcnxPitEntryIncomingFace::CcnxPitEntryIncomingFace(ns3::Ptr<ns3::CcnxFace> face) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::CcnxFace >', 'face')])
+    ## ccnx-pit-entry-incoming-face.h (module 'NDNabstraction'): ns3::CcnxPitEntryIncomingFace::m_arrivalTime [variable]
+    cls.add_instance_attribute('m_arrivalTime', 'ns3::Time', is_const=False)
+    ## ccnx-pit-entry-incoming-face.h (module 'NDNabstraction'): ns3::CcnxPitEntryIncomingFace::m_face [variable]
+    cls.add_instance_attribute('m_face', 'ns3::Ptr< ns3::CcnxFace >', is_const=False)
+    return
+
+def register_Ns3CcnxPitEntryIncomingFaceContainer_methods(root_module, cls):
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxPitEntryIncomingFaceContainer::CcnxPitEntryIncomingFaceContainer() [constructor]
+    cls.add_constructor([])
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxPitEntryIncomingFaceContainer::CcnxPitEntryIncomingFaceContainer(ns3::CcnxPitEntryIncomingFaceContainer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxPitEntryIncomingFaceContainer const &', 'arg0')])
+    return
+
+def register_Ns3CcnxPitEntryNotFound_methods(root_module, cls):
+    ## ccnx-pit.h (module 'NDNabstraction'): ns3::CcnxPitEntryNotFound::CcnxPitEntryNotFound() [constructor]
+    cls.add_constructor([])
+    ## ccnx-pit.h (module 'NDNabstraction'): ns3::CcnxPitEntryNotFound::CcnxPitEntryNotFound(ns3::CcnxPitEntryNotFound const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxPitEntryNotFound const &', 'arg0')])
+    return
+
+def register_Ns3CcnxPitEntryOutgoingFace_methods(root_module, cls):
+    cls.add_binary_comparison_operator('==')
+    cls.add_binary_comparison_operator('<')
+    ## ccnx-pit-entry-outgoing-face.h (module 'NDNabstraction'): ns3::CcnxPitEntryOutgoingFace::CcnxPitEntryOutgoingFace(ns3::CcnxPitEntryOutgoingFace const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxPitEntryOutgoingFace const &', 'arg0')])
+    ## ccnx-pit-entry-outgoing-face.h (module 'NDNabstraction'): ns3::CcnxPitEntryOutgoingFace::CcnxPitEntryOutgoingFace(ns3::Ptr<ns3::CcnxFace> face) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::CcnxFace >', 'face')])
+    ## ccnx-pit-entry-outgoing-face.h (module 'NDNabstraction'): ns3::CcnxPitEntryOutgoingFace::m_face [variable]
+    cls.add_instance_attribute('m_face', 'ns3::Ptr< ns3::CcnxFace >', is_const=False)
+    ## ccnx-pit-entry-outgoing-face.h (module 'NDNabstraction'): ns3::CcnxPitEntryOutgoingFace::m_sendTime [variable]
+    cls.add_instance_attribute('m_sendTime', 'ns3::Time', is_const=False)
+    return
+
+def register_Ns3CcnxPitEntryOutgoingFaceContainer_methods(root_module, cls):
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxPitEntryOutgoingFaceContainer::CcnxPitEntryOutgoingFaceContainer() [constructor]
+    cls.add_constructor([])
+    ## ccnx-pit-entry.h (module 'NDNabstraction'): ns3::CcnxPitEntryOutgoingFaceContainer::CcnxPitEntryOutgoingFaceContainer(ns3::CcnxPitEntryOutgoingFaceContainer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxPitEntryOutgoingFaceContainer const &', 'arg0')])
+    return
+
+def register_Ns3CcnxProducerHelper_methods(root_module, cls):
+    ## ccnx-producer-helper.h (module 'NDNabstraction'): ns3::CcnxProducerHelper::CcnxProducerHelper(ns3::CcnxProducerHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxProducerHelper const &', 'arg0')])
+    ## ccnx-producer-helper.h (module 'NDNabstraction'): ns3::CcnxProducerHelper::CcnxProducerHelper(uint32_t storeCapacity) [constructor]
+    cls.add_constructor([param('uint32_t', 'storeCapacity')])
+    ## ccnx-producer-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxProducerHelper::Install(ns3::NodeContainer c) [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('ns3::NodeContainer', 'c')])
+    ## ccnx-producer-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxProducerHelper::Install(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## ccnx-producer-helper.h (module 'NDNabstraction'): ns3::ApplicationContainer ns3::CcnxProducerHelper::Install(std::string nodeName) [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('std::string', 'nodeName')])
+    ## ccnx-producer-helper.h (module 'NDNabstraction'): void ns3::CcnxProducerHelper::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
+    cls.add_method('SetAttribute', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    return
+
+def register_Ns3CcnxRitContainer_methods(root_module, cls):
+    ## ccnx-rit.h (module 'NDNabstraction'): ns3::CcnxRitContainer::CcnxRitContainer() [constructor]
+    cls.add_constructor([])
+    ## ccnx-rit.h (module 'NDNabstraction'): ns3::CcnxRitContainer::CcnxRitContainer(ns3::CcnxRitContainer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxRitContainer const &', 'arg0')])
+    return
+
+def register_Ns3CcnxRitEntry_methods(root_module, cls):
+    ## ccnx-rit.h (module 'NDNabstraction'): ns3::CcnxRitEntry::CcnxRitEntry(ns3::CcnxRitEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxRitEntry const &', 'arg0')])
+    ## ccnx-rit.h (module 'NDNabstraction'): ns3::CcnxRitEntry::CcnxRitEntry(ns3::CcnxNameComponents const & prefix, uint32_t nonce, ns3::Time const & timeout) [constructor]
+    cls.add_constructor([param('ns3::CcnxNameComponents const &', 'prefix'), param('uint32_t', 'nonce'), param('ns3::Time const &', 'timeout')])
+    ## ccnx-rit.h (module 'NDNabstraction'): ns3::CcnxRitEntry::m_expireTime [variable]
+    cls.add_instance_attribute('m_expireTime', 'ns3::Time', is_const=False)
+    ## ccnx-rit.h (module 'NDNabstraction'): ns3::CcnxRitEntry::m_nonce [variable]
+    cls.add_instance_attribute('m_nonce', 'uint32_t', is_const=False)
+    ## ccnx-rit.h (module 'NDNabstraction'): ns3::CcnxRitEntry::m_prefix [variable]
+    cls.add_instance_attribute('m_prefix', 'ns3::CcnxNameComponents', is_const=False)
+    return
+
 def register_Ns3CcnxUnknownHeaderException_methods(root_module, cls):
     ## ccnx-header-helper.h (module 'NDNabstraction'): ns3::CcnxUnknownHeaderException::CcnxUnknownHeaderException() [constructor]
     cls.add_constructor([])
@@ -1458,6 +1888,34 @@
     cls.add_constructor([param('ns3::CcnxUnknownHeaderException const &', 'arg0')])
     return
 
+def register_Ns3DataRate_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('!=')
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('<=')
+    cls.add_binary_comparison_operator('==')
+    cls.add_binary_comparison_operator('>')
+    cls.add_binary_comparison_operator('>=')
+    ## data-rate.h (module 'network'): ns3::DataRate::DataRate(ns3::DataRate const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataRate const &', 'arg0')])
+    ## data-rate.h (module 'network'): ns3::DataRate::DataRate() [constructor]
+    cls.add_constructor([])
+    ## data-rate.h (module 'network'): ns3::DataRate::DataRate(uint64_t bps) [constructor]
+    cls.add_constructor([param('uint64_t', 'bps')])
+    ## data-rate.h (module 'network'): ns3::DataRate::DataRate(std::string rate) [constructor]
+    cls.add_constructor([param('std::string', 'rate')])
+    ## data-rate.h (module 'network'): double ns3::DataRate::CalculateTxTime(uint32_t bytes) const [member function]
+    cls.add_method('CalculateTxTime', 
+                   'double', 
+                   [param('uint32_t', 'bytes')], 
+                   is_const=True)
+    ## data-rate.h (module 'network'): uint64_t ns3::DataRate::GetBitRate() const [member function]
+    cls.add_method('GetBitRate', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    return
+
 def register_Ns3EventId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('==')
@@ -1505,9 +1963,9 @@
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
-    cls.add_binary_comparison_operator('<')
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
+    cls.add_binary_comparison_operator('<')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address::Ipv4Address(ns3::Ipv4Address const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Ipv4Address const &', 'arg0')])
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address::Ipv4Address() [constructor]
@@ -1676,9 +2134,9 @@
 
 def register_Ns3Ipv6Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
-    cls.add_binary_comparison_operator('<')
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
+    cls.add_binary_comparison_operator('<')
     ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address() [constructor]
     cls.add_constructor([])
     ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address(char const * address) [constructor]
@@ -1920,6 +2378,78 @@
                    is_const=True)
     return
 
+def register_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    cls.add_binary_comparison_operator('<')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3NetDeviceContainer_methods(root_module, cls):
     ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::NetDeviceContainer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDeviceContainer const &', 'arg0')])
@@ -2399,11 +2929,11 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('uint8_t const * const', 'data'), param('uint32_t', 'totalLen')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
@@ -2504,6 +3034,55 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
+def register_Ns3PointToPointHelper_methods(root_module, cls):
+    ## point-to-point-helper.h (module 'point-to-point'): ns3::PointToPointHelper::PointToPointHelper(ns3::PointToPointHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PointToPointHelper const &', 'arg0')])
+    ## point-to-point-helper.h (module 'point-to-point'): ns3::PointToPointHelper::PointToPointHelper() [constructor]
+    cls.add_constructor([])
+    ## point-to-point-helper.h (module 'point-to-point'): ns3::NetDeviceContainer ns3::PointToPointHelper::Install(ns3::NodeContainer c) [member function]
+    cls.add_method('Install', 
+                   'ns3::NetDeviceContainer', 
+                   [param('ns3::NodeContainer', 'c')])
+    ## point-to-point-helper.h (module 'point-to-point'): ns3::NetDeviceContainer ns3::PointToPointHelper::Install(ns3::Ptr<ns3::Node> a, ns3::Ptr<ns3::Node> b) [member function]
+    cls.add_method('Install', 
+                   'ns3::NetDeviceContainer', 
+                   [param('ns3::Ptr< ns3::Node >', 'a'), param('ns3::Ptr< ns3::Node >', 'b')])
+    ## point-to-point-helper.h (module 'point-to-point'): ns3::NetDeviceContainer ns3::PointToPointHelper::Install(ns3::Ptr<ns3::Node> a, std::string bName) [member function]
+    cls.add_method('Install', 
+                   'ns3::NetDeviceContainer', 
+                   [param('ns3::Ptr< ns3::Node >', 'a'), param('std::string', 'bName')])
+    ## point-to-point-helper.h (module 'point-to-point'): ns3::NetDeviceContainer ns3::PointToPointHelper::Install(std::string aName, ns3::Ptr<ns3::Node> b) [member function]
+    cls.add_method('Install', 
+                   'ns3::NetDeviceContainer', 
+                   [param('std::string', 'aName'), param('ns3::Ptr< ns3::Node >', 'b')])
+    ## point-to-point-helper.h (module 'point-to-point'): ns3::NetDeviceContainer ns3::PointToPointHelper::Install(std::string aNode, std::string bNode) [member function]
+    cls.add_method('Install', 
+                   'ns3::NetDeviceContainer', 
+                   [param('std::string', 'aNode'), param('std::string', 'bNode')])
+    ## point-to-point-helper.h (module 'point-to-point'): void ns3::PointToPointHelper::SetChannelAttribute(std::string name, ns3::AttributeValue const & value) [member function]
+    cls.add_method('SetChannelAttribute', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    ## point-to-point-helper.h (module 'point-to-point'): void ns3::PointToPointHelper::SetDeviceAttribute(std::string name, ns3::AttributeValue const & value) [member function]
+    cls.add_method('SetDeviceAttribute', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    ## point-to-point-helper.h (module 'point-to-point'): void ns3::PointToPointHelper::SetQueue(std::string type, std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('SetQueue', 
+                   'void', 
+                   [param('std::string', 'type'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()')])
+    ## point-to-point-helper.h (module 'point-to-point'): void ns3::PointToPointHelper::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiInternal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    ## point-to-point-helper.h (module 'point-to-point'): void ns3::PointToPointHelper::EnablePcapInternal(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapInternal', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    return
+
 def register_Ns3RandomVariable_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## random-variable.h (module 'core'): ns3::RandomVariable::RandomVariable() [constructor]
@@ -2809,9 +3388,9 @@
 
 def register_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
-    cls.add_binary_comparison_operator('<')
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
+    cls.add_binary_comparison_operator('<')
     ## type-id.h (module 'core'): ns3::TypeId::TypeId(char const * name) [constructor]
     cls.add_constructor([param('char const *', 'name')])
     ## type-id.h (module 'core'): ns3::TypeId::TypeId() [constructor]
@@ -3042,7 +3621,15 @@
     return
 
 def register_Ns3Int64x64_t_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
+    cls.add_inplace_numeric_operator('*=', param('ns3::int64x64_t const &', 'right'))
+    cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', 'right'))
+    cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', 'right'))
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    cls.add_binary_comparison_operator('>=')
+    cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', 'right'))
     cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
     cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
     cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
@@ -3094,14 +3681,6 @@
     cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('>')
-    cls.add_inplace_numeric_operator('*=', param('ns3::int64x64_t const &', 'right'))
-    cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', 'right'))
-    cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', 'right'))
-    cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', 'right'))
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('<=')
-    cls.add_binary_comparison_operator('==')
-    cls.add_binary_comparison_operator('>=')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t() [constructor]
     cls.add_constructor([])
     ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(double v) [constructor]
@@ -3153,24 +3732,24 @@
     cls.add_constructor([])
     ## ccnx-stack-helper.h (module 'NDNabstraction'): ns3::CcnxStackHelper::CcnxStackHelper(ns3::CcnxStackHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CcnxStackHelper const &', 'arg0')])
-    ## ccnx-stack-helper.h (module 'NDNabstraction'): void ns3::CcnxStackHelper::Install(std::string nodeName) const [member function]
+    ## ccnx-stack-helper.h (module 'NDNabstraction'): ns3::Ptr<ns3::CcnxFaceContainer> ns3::CcnxStackHelper::Install(std::string nodeName) const [member function]
     cls.add_method('Install', 
-                   'void', 
+                   'ns3::Ptr< ns3::CcnxFaceContainer >', 
                    [param('std::string', 'nodeName')], 
                    is_const=True)
-    ## ccnx-stack-helper.h (module 'NDNabstraction'): void ns3::CcnxStackHelper::Install(ns3::Ptr<ns3::Node> node) const [member function]
+    ## ccnx-stack-helper.h (module 'NDNabstraction'): ns3::Ptr<ns3::CcnxFaceContainer> ns3::CcnxStackHelper::Install(ns3::Ptr<ns3::Node> node) const [member function]
     cls.add_method('Install', 
-                   'void', 
+                   'ns3::Ptr< ns3::CcnxFaceContainer >', 
                    [param('ns3::Ptr< ns3::Node >', 'node')], 
                    is_const=True)
-    ## ccnx-stack-helper.h (module 'NDNabstraction'): void ns3::CcnxStackHelper::Install(ns3::NodeContainer c) const [member function]
+    ## ccnx-stack-helper.h (module 'NDNabstraction'): ns3::Ptr<ns3::CcnxFaceContainer> ns3::CcnxStackHelper::Install(ns3::NodeContainer c) const [member function]
     cls.add_method('Install', 
-                   'void', 
+                   'ns3::Ptr< ns3::CcnxFaceContainer >', 
                    [param('ns3::NodeContainer', 'c')], 
                    is_const=True)
-    ## ccnx-stack-helper.h (module 'NDNabstraction'): void ns3::CcnxStackHelper::InstallAll() const [member function]
+    ## ccnx-stack-helper.h (module 'NDNabstraction'): ns3::Ptr<ns3::CcnxFaceContainer> ns3::CcnxStackHelper::InstallAll() const [member function]
     cls.add_method('InstallAll', 
-                   'void', 
+                   'ns3::Ptr< ns3::CcnxFaceContainer >', 
                    [], 
                    is_const=True)
     ## ccnx-stack-helper.h (module 'NDNabstraction'): void ns3::CcnxStackHelper::Reset() [member function]
@@ -3474,11 +4053,11 @@
     cls.add_method('Init', 
                    'void', 
                    [param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='ns3::PcapFile::ZONE_DEFAULT')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
@@ -3516,6 +4095,94 @@
                    [])
     return
 
+def register_Ns3Queue_methods(root_module, cls):
+    ## queue.h (module 'network'): ns3::Queue::Queue(ns3::Queue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Queue const &', 'arg0')])
+    ## queue.h (module 'network'): ns3::Queue::Queue() [constructor]
+    cls.add_constructor([])
+    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Queue::Dequeue() [member function]
+    cls.add_method('Dequeue', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [])
+    ## queue.h (module 'network'): void ns3::Queue::DequeueAll() [member function]
+    cls.add_method('DequeueAll', 
+                   'void', 
+                   [])
+    ## queue.h (module 'network'): bool ns3::Queue::Enqueue(ns3::Ptr<ns3::Packet> p) [member function]
+    cls.add_method('Enqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetNBytes() const [member function]
+    cls.add_method('GetNBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetNPackets() const [member function]
+    cls.add_method('GetNPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalDroppedBytes() const [member function]
+    cls.add_method('GetTotalDroppedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalDroppedPackets() const [member function]
+    cls.add_method('GetTotalDroppedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalReceivedBytes() const [member function]
+    cls.add_method('GetTotalReceivedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalReceivedPackets() const [member function]
+    cls.add_method('GetTotalReceivedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): static ns3::TypeId ns3::Queue::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue.h (module 'network'): bool ns3::Queue::IsEmpty() const [member function]
+    cls.add_method('IsEmpty', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::Queue::Peek() const [member function]
+    cls.add_method('Peek', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
+    cls.add_method('ResetStatistics', 
+                   'void', 
+                   [])
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::Packet> packet) [member function]
+    cls.add_method('Drop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet')], 
+                   visibility='protected')
+    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Queue::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): bool ns3::Queue::DoEnqueue(ns3::Ptr<ns3::Packet> p) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::Queue::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3564,12 +4231,48 @@
                    is_static=True)
     return
 
-def register_Ns3SimpleRefCount__Ns3CcnxParserBlock_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxParserBlock__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxParser::Block, ns3::empty, ns3::DefaultDeleter<ns3::CcnxParser::Block> >::SimpleRefCount() [constructor]
+def register_Ns3SimpleRefCount__Ns3CcnbParserBlock_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnbParserBlock__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnbParser::Block, ns3::empty, ns3::DefaultDeleter<ns3::CcnbParser::Block> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxParser::Block, ns3::empty, ns3::DefaultDeleter<ns3::CcnxParser::Block> >::SimpleRefCount(ns3::SimpleRefCount<ns3::CcnxParser::Block, ns3::empty, ns3::DefaultDeleter<ns3::CcnxParser::Block> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::CcnxParser::Block, ns3::empty, ns3::DefaultDeleter< ns3::CcnxParser::Block > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::CcnxParser::Block, ns3::empty, ns3::DefaultDeleter<ns3::CcnxParser::Block> >::Cleanup() [member function]
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnbParser::Block, ns3::empty, ns3::DefaultDeleter<ns3::CcnbParser::Block> >::SimpleRefCount(ns3::SimpleRefCount<ns3::CcnbParser::Block, ns3::empty, ns3::DefaultDeleter<ns3::CcnbParser::Block> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::CcnbParser::Block, ns3::empty, ns3::DefaultDeleter< ns3::CcnbParser::Block > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::CcnbParser::Block, ns3::empty, ns3::DefaultDeleter<ns3::CcnbParser::Block> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3CcnxFaceContainer_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxFaceContainer__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxFaceContainer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxFaceContainer> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxFaceContainer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxFaceContainer> >::SimpleRefCount(ns3::SimpleRefCount<ns3::CcnxFaceContainer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxFaceContainer> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::CcnxFaceContainer, ns3::empty, ns3::DefaultDeleter< ns3::CcnxFaceContainer > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::CcnxFaceContainer, ns3::empty, ns3::DefaultDeleter<ns3::CcnxFaceContainer> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3CcnxFibEntry_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxFibEntry__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxFibEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxFibEntry> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxFibEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxFibEntry> >::SimpleRefCount(ns3::SimpleRefCount<ns3::CcnxFibEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxFibEntry> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::CcnxFibEntry, ns3::empty, ns3::DefaultDeleter< ns3::CcnxFibEntry > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::CcnxFibEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxFibEntry> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3CcnxNameComponents_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxNameComponents__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxNameComponents, ns3::empty, ns3::DefaultDeleter<ns3::CcnxNameComponents> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxNameComponents, ns3::empty, ns3::DefaultDeleter<ns3::CcnxNameComponents> >::SimpleRefCount(ns3::SimpleRefCount<ns3::CcnxNameComponents, ns3::empty, ns3::DefaultDeleter<ns3::CcnxNameComponents> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::CcnxNameComponents, ns3::empty, ns3::DefaultDeleter< ns3::CcnxNameComponents > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::CcnxNameComponents, ns3::empty, ns3::DefaultDeleter<ns3::CcnxNameComponents> >::Cleanup() [member function]
     cls.add_method('Cleanup', 
                    'void', 
                    [], 
@@ -3600,18 +4303,6 @@
                    is_static=True)
     return
 
-def register_Ns3SimpleRefCount__Ns3NameComponents_Ns3Empty_Ns3DefaultDeleter__lt__ns3NameComponents__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Name::Components, ns3::empty, ns3::DefaultDeleter<ns3::Name::Components> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Name::Components, ns3::empty, ns3::DefaultDeleter<ns3::Name::Components> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Name::Components, ns3::empty, ns3::DefaultDeleter<ns3::Name::Components> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Name::Components, ns3::empty, ns3::DefaultDeleter< ns3::Name::Components > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Name::Components, ns3::empty, ns3::DefaultDeleter<ns3::Name::Components> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
 def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -4042,17 +4733,17 @@
     return
 
 def register_Ns3Time_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
+    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', 'right'))
+    cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', 'right'))
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    cls.add_binary_comparison_operator('>=')
     cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
     cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('>')
-    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', 'right'))
-    cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', 'right'))
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('<=')
-    cls.add_binary_comparison_operator('==')
-    cls.add_binary_comparison_operator('>=')
     ## nstime.h (module 'core'): ns3::Time::Time() [constructor]
     cls.add_constructor([])
     ## nstime.h (module 'core'): ns3::Time::Time(ns3::Time const & o) [copy constructor]
@@ -4379,6 +5070,10 @@
                    'ns3::NodeContainer', 
                    [], 
                    is_virtual=True)
+    ## annotated-topology-reader.h (module 'NDNabstraction'): void ns3::AnnotatedTopologyReader::ApplySettings(ns3::NetDeviceContainer * ndc, ns3::NodeContainer * nc) [member function]
+    cls.add_method('ApplySettings', 
+                   'void', 
+                   [param('ns3::NetDeviceContainer *', 'ndc'), param('ns3::NodeContainer *', 'nc')])
     return
 
 def register_Ns3Application_methods(root_module, cls):
@@ -4521,6 +5216,47 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3BooleanChecker_methods(root_module, cls):
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker(ns3::BooleanChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanChecker const &', 'arg0')])
+    return
+
+def register_Ns3BooleanValue_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(ns3::BooleanValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanValue const &', 'arg0')])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(bool value) [constructor]
+    cls.add_constructor([param('bool', 'value')])
+    ## boolean.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::BooleanValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## boolean.h (module 'core'): std::string ns3::BooleanValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): void ns3::BooleanValue::Set(bool value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('bool', 'value')])
+    return
+
 def register_Ns3CallbackChecker_methods(root_module, cls):
     ## callback.h (module 'core'): ns3::CallbackChecker::CallbackChecker() [constructor]
     cls.add_constructor([])
@@ -4598,16 +5334,54 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## ccnx.h (module 'NDNabstraction'): void ns3::Ccnx::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ptr<ns3::CcnxFace> const & face) [member function]
+    ## ccnx.h (module 'NDNabstraction'): void ns3::Ccnx::Receive(ns3::Ptr<ns3::CcnxFace> const & face, ns3::Ptr<ns3::Packet const> const & p) [member function]
+    cls.add_method('Receive', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::CcnxFace > const &', 'face'), param('ns3::Ptr< ns3::Packet const > const &', 'p')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ccnx.h (module 'NDNabstraction'): void ns3::Ccnx::Send(ns3::Ptr<ns3::CcnxFace> const & face, ns3::Ptr<ns3::Packet> const & packet) [member function]
     cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ptr< ns3::CcnxFace > const &', 'face')], 
+                   [param('ns3::Ptr< ns3::CcnxFace > const &', 'face'), param('ns3::Ptr< ns3::Packet > const &', 'packet')], 
                    is_pure_virtual=True, is_virtual=True)
     ## ccnx.h (module 'NDNabstraction'): void ns3::Ccnx::SetForwardingStrategy(ns3::Ptr<ns3::CcnxForwardingStrategy> forwardingStrategy) [member function]
     cls.add_method('SetForwardingStrategy', 
                    'void', 
                    [param('ns3::Ptr< ns3::CcnxForwardingStrategy >', 'forwardingStrategy')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ccnx.h (module 'NDNabstraction'): ns3::Ccnx::m_contentStore [variable]
+    cls.add_instance_attribute('m_contentStore', 'ns3::Ptr< ns3::CcnxContentStore >', is_const=False)
+    return
+
+def register_Ns3CcnxConsumer_methods(root_module, cls):
+    ## ccnx-consumer.h (module 'NDNabstraction'): ns3::CcnxConsumer::CcnxConsumer(ns3::CcnxConsumer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxConsumer const &', 'arg0')])
+    ## ccnx-consumer.h (module 'NDNabstraction'): ns3::CcnxConsumer::CcnxConsumer() [constructor]
+    cls.add_constructor([])
+    ## ccnx-consumer.h (module 'NDNabstraction'): static ns3::TypeId ns3::CcnxConsumer::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ccnx-consumer.h (module 'NDNabstraction'): void ns3::CcnxConsumer::HandlePacket(ns3::Ptr<ns3::CcnxFace> const & face, ns3::Ptr<ns3::Packet const> const & packet) [member function]
+    cls.add_method('HandlePacket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::CcnxFace > const &', 'face'), param('ns3::Ptr< ns3::Packet const > const &', 'packet')])
+    ## ccnx-consumer.h (module 'NDNabstraction'): void ns3::CcnxConsumer::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ccnx-consumer.h (module 'NDNabstraction'): void ns3::CcnxConsumer::StartApplication() [member function]
+    cls.add_method('StartApplication', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## ccnx-consumer.h (module 'NDNabstraction'): void ns3::CcnxConsumer::StopApplication() [member function]
+    cls.add_method('StopApplication', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
     return
 
 def register_Ns3CcnxContentObjectHeader_methods(root_module, cls):
@@ -4625,9 +5399,9 @@
                    'ns3::TypeId', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## ccnx-content-object-header.h (module 'NDNabstraction'): ns3::Name::Components const & ns3::CcnxContentObjectHeader::GetName() const [member function]
+    ## ccnx-content-object-header.h (module 'NDNabstraction'): ns3::CcnxNameComponents const & ns3::CcnxContentObjectHeader::GetName() const [member function]
     cls.add_method('GetName', 
-                   'ns3::Name::Components const &', 
+                   'ns3::CcnxNameComponents const &', 
                    [], 
                    is_const=True)
     ## ccnx-content-object-header.h (module 'NDNabstraction'): uint32_t ns3::CcnxContentObjectHeader::GetSerializedSize() const [member function]
@@ -4650,10 +5424,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
-    ## ccnx-content-object-header.h (module 'NDNabstraction'): void ns3::CcnxContentObjectHeader::SetName(ns3::Ptr<ns3::Name::Components> const & name) [member function]
+    ## ccnx-content-object-header.h (module 'NDNabstraction'): void ns3::CcnxContentObjectHeader::SetName(ns3::Ptr<ns3::CcnxNameComponents> const & name) [member function]
     cls.add_method('SetName', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Name::Components > const &', 'name')])
+                   [param('ns3::Ptr< ns3::CcnxNameComponents > const &', 'name')])
     return
 
 def register_Ns3CcnxContentObjectTail_methods(root_module, cls):
@@ -4693,17 +5467,50 @@
                    is_const=True, is_virtual=True)
     return
 
+def register_Ns3CcnxContentStore_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## ccnx-content-store.h (module 'NDNabstraction'): ns3::CcnxContentStore::CcnxContentStore() [constructor]
+    cls.add_constructor([])
+    ## ccnx-content-store.h (module 'NDNabstraction'): void ns3::CcnxContentStore::Add(ns3::Ptr<ns3::CcnxContentObjectHeader> header, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::CcnxContentObjectHeader >', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## ccnx-content-store.h (module 'NDNabstraction'): uint32_t ns3::CcnxContentStore::GetMaxSize() const [member function]
+    cls.add_method('GetMaxSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## ccnx-content-store.h (module 'NDNabstraction'): static ns3::TypeId ns3::CcnxContentStore::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ccnx-content-store.h (module 'NDNabstraction'): ns3::Ptr<ns3::Packet> ns3::CcnxContentStore::Lookup(ns3::Ptr<const ns3::CcnxInterestHeader> interest) [member function]
+    cls.add_method('Lookup', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::Ptr< ns3::CcnxInterestHeader const >', 'interest')])
+    ## ccnx-content-store.h (module 'NDNabstraction'): void ns3::CcnxContentStore::Print() const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [], 
+                   is_const=True)
+    ## ccnx-content-store.h (module 'NDNabstraction'): void ns3::CcnxContentStore::SetMaxSize(uint32_t maxSize) [member function]
+    cls.add_method('SetMaxSize', 
+                   'void', 
+                   [param('uint32_t', 'maxSize')])
+    return
+
 def register_Ns3CcnxFace_methods(root_module, cls):
     cls.add_output_stream_operator()
-    ## ccnx-face.h (module 'NDNabstraction'): ns3::CcnxFace::CcnxFace(ns3::CcnxFace const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxFace const &', 'arg0')])
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('==')
     ## ccnx-face.h (module 'NDNabstraction'): ns3::CcnxFace::CcnxFace() [constructor]
     cls.add_constructor([])
-    ## ccnx-face.h (module 'NDNabstraction'): ns3::Ptr<ns3::NetDevice> ns3::CcnxFace::GetDevice() const [member function]
-    cls.add_method('GetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
+    ## ccnx-face.h (module 'NDNabstraction'): uint32_t ns3::CcnxFace::GetId() const [member function]
+    cls.add_method('GetId', 
+                   'uint32_t', 
                    [], 
-                   is_const=True, is_virtual=True)
+                   is_const=True)
     ## ccnx-face.h (module 'NDNabstraction'): uint16_t ns3::CcnxFace::GetMetric() const [member function]
     cls.add_method('GetMetric', 
                    'uint16_t', 
@@ -4724,21 +5531,25 @@
                    'bool', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## ccnx-face.h (module 'NDNabstraction'): void ns3::CcnxFace::RegisterProtocolHandler(ns3::Callback<void, ns3::Ptr<ns3::CcnxFace> const&, ns3::Ptr<ns3::Packet const> const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> handler) [member function]
+    cls.add_method('RegisterProtocolHandler', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::CcnxFace >, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'handler')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ccnx-face.h (module 'NDNabstraction'): void ns3::CcnxFace::Send(ns3::Ptr<ns3::Packet> p) [member function]
     cls.add_method('Send', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'p')], 
-                   is_virtual=True)
-    ## ccnx-face.h (module 'NDNabstraction'): void ns3::CcnxFace::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
-    cls.add_method('SetDevice', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
-                   is_virtual=True)
+                   is_pure_virtual=True, is_virtual=True)
     ## ccnx-face.h (module 'NDNabstraction'): void ns3::CcnxFace::SetDown() [member function]
     cls.add_method('SetDown', 
                    'void', 
                    [], 
                    is_virtual=True)
+    ## ccnx-face.h (module 'NDNabstraction'): void ns3::CcnxFace::SetId(uint32_t id) [member function]
+    cls.add_method('SetId', 
+                   'void', 
+                   [param('uint32_t', 'id')])
     ## ccnx-face.h (module 'NDNabstraction'): void ns3::CcnxFace::SetMetric(uint16_t metric) [member function]
     cls.add_method('SetMetric', 
                    'void', 
@@ -4761,6 +5572,70 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3CcnxFaceContainer_methods(root_module, cls):
+    ## ccnx-face-container.h (module 'NDNabstraction'): ns3::CcnxFaceContainer::CcnxFaceContainer() [constructor]
+    cls.add_constructor([])
+    ## ccnx-face-container.h (module 'NDNabstraction'): ns3::CcnxFaceContainer::CcnxFaceContainer(ns3::CcnxFaceContainer const & other) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxFaceContainer const &', 'other')])
+    ## ccnx-face-container.h (module 'NDNabstraction'): void ns3::CcnxFaceContainer::Add(ns3::Ptr<ns3::CcnxFace> const & face) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::CcnxFace > const &', 'face')])
+    ## ccnx-face-container.h (module 'NDNabstraction'): void ns3::CcnxFaceContainer::AddAll(ns3::Ptr<ns3::CcnxFaceContainer> other) [member function]
+    cls.add_method('AddAll', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::CcnxFaceContainer >', 'other')])
+    ## ccnx-face-container.h (module 'NDNabstraction'): void ns3::CcnxFaceContainer::AddAll(ns3::CcnxFaceContainer const & other) [member function]
+    cls.add_method('AddAll', 
+                   'void', 
+                   [param('ns3::CcnxFaceContainer const &', 'other')])
+    ## ccnx-face-container.h (module 'NDNabstraction'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::CcnxFace>*,std::vector<ns3::Ptr<ns3::CcnxFace>, std::allocator<ns3::Ptr<ns3::CcnxFace> > > > ns3::CcnxFaceContainer::Begin() const [member function]
+    cls.add_method('Begin', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::CcnxFace > const, std::vector< ns3::Ptr< ns3::CcnxFace > > >', 
+                   [], 
+                   is_const=True)
+    ## ccnx-face-container.h (module 'NDNabstraction'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::CcnxFace>*,std::vector<ns3::Ptr<ns3::CcnxFace>, std::allocator<ns3::Ptr<ns3::CcnxFace> > > > ns3::CcnxFaceContainer::End() const [member function]
+    cls.add_method('End', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::CcnxFace > const, std::vector< ns3::Ptr< ns3::CcnxFace > > >', 
+                   [], 
+                   is_const=True)
+    ## ccnx-face-container.h (module 'NDNabstraction'): ns3::Ptr<ns3::CcnxFace> ns3::CcnxFaceContainer::Get(__gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::CcnxFace>*,std::vector<ns3::Ptr<ns3::CcnxFace>, std::allocator<ns3::Ptr<ns3::CcnxFace> > > > i) const [member function]
+    cls.add_method('Get', 
+                   'ns3::Ptr< ns3::CcnxFace >', 
+                   [param('__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::CcnxFace > const, std::vector< ns3::Ptr< ns3::CcnxFace > > >', 'i')], 
+                   is_const=True)
+    ## ccnx-face-container.h (module 'NDNabstraction'): uint32_t ns3::CcnxFaceContainer::GetN() const [member function]
+    cls.add_method('GetN', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## ccnx-face-container.h (module 'NDNabstraction'): void ns3::CcnxFaceContainer::SetMetricToAll(uint16_t metric) [member function]
+    cls.add_method('SetMetricToAll', 
+                   'void', 
+                   [param('uint16_t', 'metric')])
+    return
+
+def register_Ns3CcnxFibEntry_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibEntry::CcnxFibEntry(ns3::CcnxFibEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxFibEntry const &', 'arg0')])
+    ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxFibEntry::CcnxFibEntry(ns3::Ptr<ns3::CcnxNameComponents> prefix) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::CcnxNameComponents >', 'prefix')])
+    ## ccnx-fib.h (module 'NDNabstraction'): ns3::Ptr<ns3::CcnxFace> ns3::CcnxFibEntry::FindBestCandidate(int skip=0) [member function]
+    cls.add_method('FindBestCandidate', 
+                   'ns3::Ptr< ns3::CcnxFace >', 
+                   [param('int', 'skip', default_value='0')])
+    ## ccnx-fib.h (module 'NDNabstraction'): ns3::CcnxNameComponents const & ns3::CcnxFibEntry::GetPrefix() const [member function]
+    cls.add_method('GetPrefix', 
+                   'ns3::CcnxNameComponents const &', 
+                   [], 
+                   is_const=True)
+    ## ccnx-fib.h (module 'NDNabstraction'): void ns3::CcnxFibEntry::UpdateStatus(ns3::Ptr<ns3::CcnxFace> face, uint8_t status) [member function]
+    cls.add_method('UpdateStatus', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::CcnxFace >', 'face'), param('uint8_t', 'status')])
+    return
+
 def register_Ns3CcnxForwardingStrategy_methods(root_module, cls):
     ## ccnx-forwarding-strategy.h (module 'NDNabstraction'): ns3::CcnxForwardingStrategy::CcnxForwardingStrategy() [constructor]
     cls.add_constructor([])
@@ -4808,9 +5683,9 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
-    ## ccnx-interest-header.h (module 'NDNabstraction'): ns3::Name::Components const & ns3::CcnxInterestHeader::GetExclude() const [member function]
+    ## ccnx-interest-header.h (module 'NDNabstraction'): ns3::CcnxNameComponents const & ns3::CcnxInterestHeader::GetExclude() const [member function]
     cls.add_method('GetExclude', 
-                   'ns3::Name::Components const &', 
+                   'ns3::CcnxNameComponents const &', 
                    [], 
                    is_const=True)
     ## ccnx-interest-header.h (module 'NDNabstraction'): ns3::TypeId ns3::CcnxInterestHeader::GetInstanceTypeId() const [member function]
@@ -4833,9 +5708,9 @@
                    'int32_t', 
                    [], 
                    is_const=True)
-    ## ccnx-interest-header.h (module 'NDNabstraction'): ns3::Name::Components const & ns3::CcnxInterestHeader::GetName() const [member function]
+    ## ccnx-interest-header.h (module 'NDNabstraction'): ns3::CcnxNameComponents const & ns3::CcnxInterestHeader::GetName() const [member function]
     cls.add_method('GetName', 
-                   'ns3::Name::Components const &', 
+                   'ns3::CcnxNameComponents const &', 
                    [], 
                    is_const=True)
     ## ccnx-interest-header.h (module 'NDNabstraction'): uint32_t ns3::CcnxInterestHeader::GetNonce() const [member function]
@@ -4886,10 +5761,10 @@
     cls.add_method('SetChildSelector', 
                    'void', 
                    [param('bool', 'value')])
-    ## ccnx-interest-header.h (module 'NDNabstraction'): void ns3::CcnxInterestHeader::SetExclude(ns3::Ptr<ns3::Name::Components> const & exclude) [member function]
+    ## ccnx-interest-header.h (module 'NDNabstraction'): void ns3::CcnxInterestHeader::SetExclude(ns3::Ptr<ns3::CcnxNameComponents> const & exclude) [member function]
     cls.add_method('SetExclude', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Name::Components > const &', 'exclude')])
+                   [param('ns3::Ptr< ns3::CcnxNameComponents > const &', 'exclude')])
     ## ccnx-interest-header.h (module 'NDNabstraction'): void ns3::CcnxInterestHeader::SetInterestLifetime(ns3::Time time) [member function]
     cls.add_method('SetInterestLifetime', 
                    'void', 
@@ -4902,10 +5777,10 @@
     cls.add_method('SetMinSuffixComponents', 
                    'void', 
                    [param('int32_t', 'value')])
-    ## ccnx-interest-header.h (module 'NDNabstraction'): void ns3::CcnxInterestHeader::SetName(ns3::Ptr<ns3::Name::Components> const & name) [member function]
+    ## ccnx-interest-header.h (module 'NDNabstraction'): void ns3::CcnxInterestHeader::SetName(ns3::Ptr<ns3::CcnxNameComponents> const & name) [member function]
     cls.add_method('SetName', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Name::Components > const &', 'name')])
+                   [param('ns3::Ptr< ns3::CcnxNameComponents > const &', 'name')])
     ## ccnx-interest-header.h (module 'NDNabstraction'): void ns3::CcnxInterestHeader::SetNonce(uint32_t nonce) [member function]
     cls.add_method('SetNonce', 
                    'void', 
@@ -4916,6 +5791,33 @@
                    [param('int8_t', 'scope')])
     return
 
+def register_Ns3CcnxInterestSender_methods(root_module, cls):
+    ## ccnx-interest-sender.h (module 'NDNabstraction'): ns3::CcnxInterestSender::CcnxInterestSender(ns3::CcnxInterestSender const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxInterestSender const &', 'arg0')])
+    ## ccnx-interest-sender.h (module 'NDNabstraction'): ns3::CcnxInterestSender::CcnxInterestSender() [constructor]
+    cls.add_constructor([])
+    ## ccnx-interest-sender.h (module 'NDNabstraction'): static ns3::TypeId ns3::CcnxInterestSender::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ccnx-interest-sender.h (module 'NDNabstraction'): void ns3::CcnxInterestSender::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ccnx-interest-sender.h (module 'NDNabstraction'): void ns3::CcnxInterestSender::StartApplication() [member function]
+    cls.add_method('StartApplication', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## ccnx-interest-sender.h (module 'NDNabstraction'): void ns3::CcnxInterestSender::StopApplication() [member function]
+    cls.add_method('StopApplication', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
 def register_Ns3CcnxL3Protocol_methods(root_module, cls):
     ## ccnx-l3-protocol.h (module 'NDNabstraction'): ns3::CcnxL3Protocol::ETHERNET_FRAME_TYPE [variable]
     cls.add_static_attribute('ETHERNET_FRAME_TYPE', 'uint16_t const', is_const=True)
@@ -4944,10 +5846,15 @@
                    'ns3::Ptr< ns3::CcnxForwardingStrategy >', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## ccnx-l3-protocol.h (module 'NDNabstraction'): void ns3::CcnxL3Protocol::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ptr<ns3::CcnxFace> const & face) [member function]
+    ## ccnx-l3-protocol.h (module 'NDNabstraction'): void ns3::CcnxL3Protocol::Send(ns3::Ptr<ns3::CcnxFace> const & face, ns3::Ptr<ns3::Packet> const & packet) [member function]
     cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ptr< ns3::CcnxFace > const &', 'face')], 
+                   [param('ns3::Ptr< ns3::CcnxFace > const &', 'face'), param('ns3::Ptr< ns3::Packet > const &', 'packet')], 
+                   is_virtual=True)
+    ## ccnx-l3-protocol.h (module 'NDNabstraction'): void ns3::CcnxL3Protocol::Receive(ns3::Ptr<ns3::CcnxFace> const & face, ns3::Ptr<ns3::Packet const> const & p) [member function]
+    cls.add_method('Receive', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::CcnxFace > const &', 'face'), param('ns3::Ptr< ns3::Packet const > const &', 'p')], 
                    is_virtual=True)
     ## ccnx-l3-protocol.h (module 'NDNabstraction'): uint32_t ns3::CcnxL3Protocol::AddFace(ns3::Ptr<ns3::CcnxFace> const & face) [member function]
     cls.add_method('AddFace', 
@@ -4964,50 +5871,15 @@
                    'ns3::Ptr< ns3::CcnxFace >', 
                    [param('uint32_t', 'face')], 
                    is_const=True, is_virtual=True)
-    ## ccnx-l3-protocol.h (module 'NDNabstraction'): void ns3::CcnxL3Protocol::SetMetric(uint32_t i, uint16_t metric) [member function]
-    cls.add_method('SetMetric', 
-                   'void', 
-                   [param('uint32_t', 'i'), param('uint16_t', 'metric')], 
-                   is_virtual=True)
-    ## ccnx-l3-protocol.h (module 'NDNabstraction'): uint16_t ns3::CcnxL3Protocol::GetMetric(uint32_t i) const [member function]
-    cls.add_method('GetMetric', 
-                   'uint16_t', 
-                   [param('uint32_t', 'i')], 
-                   is_const=True, is_virtual=True)
-    ## ccnx-l3-protocol.h (module 'NDNabstraction'): uint16_t ns3::CcnxL3Protocol::GetMtu(uint32_t i) const [member function]
-    cls.add_method('GetMtu', 
-                   'uint16_t', 
-                   [param('uint32_t', 'i')], 
-                   is_const=True, is_virtual=True)
-    ## ccnx-l3-protocol.h (module 'NDNabstraction'): bool ns3::CcnxL3Protocol::IsUp(uint32_t i) const [member function]
-    cls.add_method('IsUp', 
-                   'bool', 
-                   [param('uint32_t', 'i')], 
-                   is_const=True, is_virtual=True)
-    ## ccnx-l3-protocol.h (module 'NDNabstraction'): void ns3::CcnxL3Protocol::SetUp(uint32_t i) [member function]
-    cls.add_method('SetUp', 
-                   'void', 
-                   [param('uint32_t', 'i')], 
-                   is_virtual=True)
-    ## ccnx-l3-protocol.h (module 'NDNabstraction'): void ns3::CcnxL3Protocol::SetDown(uint32_t i) [member function]
-    cls.add_method('SetDown', 
-                   'void', 
-                   [param('uint32_t', 'i')], 
-                   is_virtual=True)
-    ## ccnx-l3-protocol.h (module 'NDNabstraction'): void ns3::CcnxL3Protocol::ReceiveFromLower(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<const ns3::Packet> p, uint16_t protocol, ns3::Address const & from, ns3::Address const & to, ns3::NetDevice::PacketType packetType) [member function]
-    cls.add_method('ReceiveFromLower', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::Packet const >', 'p'), param('uint16_t', 'protocol'), param('ns3::Address const &', 'from'), param('ns3::Address const &', 'to'), param('ns3::NetDevice::PacketType', 'packetType')], 
-                   visibility='protected')
-    ## ccnx-l3-protocol.h (module 'NDNabstraction'): void ns3::CcnxL3Protocol::ReceiveAndProcess(ns3::Ptr<ns3::CcnxFace> face, ns3::Ptr<ns3::CcnxInterestHeader> header, ns3::Ptr<ns3::Packet> p) [member function]
+    ## ccnx-l3-protocol.h (module 'NDNabstraction'): void ns3::CcnxL3Protocol::ReceiveAndProcess(ns3::Ptr<ns3::CcnxFace> const & face, ns3::Ptr<ns3::CcnxInterestHeader> const & header, ns3::Ptr<ns3::Packet> const & p) [member function]
     cls.add_method('ReceiveAndProcess', 
                    'void', 
-                   [param('ns3::Ptr< ns3::CcnxFace >', 'face'), param('ns3::Ptr< ns3::CcnxInterestHeader >', 'header'), param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::CcnxFace > const &', 'face'), param('ns3::Ptr< ns3::CcnxInterestHeader > const &', 'header'), param('ns3::Ptr< ns3::Packet > const &', 'p')], 
                    visibility='protected', is_virtual=True)
-    ## ccnx-l3-protocol.h (module 'NDNabstraction'): void ns3::CcnxL3Protocol::ReceiveAndProcess(ns3::Ptr<ns3::CcnxFace> face, ns3::Ptr<ns3::CcnxContentObjectHeader> header, ns3::Ptr<ns3::Packet> p) [member function]
+    ## ccnx-l3-protocol.h (module 'NDNabstraction'): void ns3::CcnxL3Protocol::ReceiveAndProcess(ns3::Ptr<ns3::CcnxFace> const & face, ns3::Ptr<ns3::CcnxContentObjectHeader> const & header, ns3::Ptr<ns3::Packet> const & p) [member function]
     cls.add_method('ReceiveAndProcess', 
                    'void', 
-                   [param('ns3::Ptr< ns3::CcnxFace >', 'face'), param('ns3::Ptr< ns3::CcnxContentObjectHeader >', 'header'), param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::CcnxFace > const &', 'face'), param('ns3::Ptr< ns3::CcnxContentObjectHeader > const &', 'header'), param('ns3::Ptr< ns3::Packet > const &', 'p')], 
                    visibility='protected', is_virtual=True)
     ## ccnx-l3-protocol.h (module 'NDNabstraction'): void ns3::CcnxL3Protocol::DoDispose() [member function]
     cls.add_method('DoDispose', 
@@ -5028,8 +5900,6 @@
 
 def register_Ns3CcnxLocalFace_methods(root_module, cls):
     cls.add_output_stream_operator()
-    ## ccnx-local-face.h (module 'NDNabstraction'): ns3::CcnxLocalFace::CcnxLocalFace(ns3::CcnxLocalFace const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxLocalFace const &', 'arg0')])
     ## ccnx-local-face.h (module 'NDNabstraction'): ns3::CcnxLocalFace::CcnxLocalFace() [constructor]
     cls.add_constructor([])
     ## ccnx-local-face.h (module 'NDNabstraction'): static ns3::TypeId ns3::CcnxLocalFace::GetTypeId() [member function]
@@ -5037,6 +5907,15 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## ccnx-local-face.h (module 'NDNabstraction'): void ns3::CcnxLocalFace::Receive(ns3::Ptr<ns3::Packet> p) [member function]
+    cls.add_method('Receive', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## ccnx-local-face.h (module 'NDNabstraction'): void ns3::CcnxLocalFace::RegisterProtocolHandler(ns3::Callback<void, ns3::Ptr<ns3::CcnxFace> const&, ns3::Ptr<ns3::Packet const> const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> handler) [member function]
+    cls.add_method('RegisterProtocolHandler', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::CcnxFace >, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'handler')], 
+                   is_virtual=True)
     ## ccnx-local-face.h (module 'NDNabstraction'): void ns3::CcnxLocalFace::Send(ns3::Ptr<ns3::Packet> p) [member function]
     cls.add_method('Send', 
                    'void', 
@@ -5047,16 +5926,229 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## ccnx-local-face.h (module 'NDNabstraction'): ns3::Ptr<ns3::NetDevice> ns3::CcnxLocalFace::GetDevice() const [member function]
-    cls.add_method('GetDevice', 
+    return
+
+def register_Ns3CcnxNameComponents_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('==')
+    ## ccnx-name-components.h (module 'NDNabstraction'): ns3::CcnxNameComponents::CcnxNameComponents(ns3::CcnxNameComponents const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxNameComponents const &', 'arg0')])
+    ## ccnx-name-components.h (module 'NDNabstraction'): ns3::CcnxNameComponents::CcnxNameComponents() [constructor]
+    cls.add_constructor([])
+    ## ccnx-name-components.h (module 'NDNabstraction'): ns3::CcnxNameComponents::CcnxNameComponents(std::string const & s) [constructor]
+    cls.add_constructor([param('std::string const &', 's')])
+    ## ccnx-name-components.h (module 'NDNabstraction'): ns3::CcnxNameComponents::CcnxNameComponents(std::list<boost::reference_wrapper<std::string const>, std::allocator<boost::reference_wrapper<std::string const> > > const & components) [constructor]
+    cls.add_constructor([param('std::list< boost::reference_wrapper< std::string const > > const &', 'components')])
+    ## ccnx-name-components.h (module 'NDNabstraction'): void ns3::CcnxNameComponents::Add(std::string const & s) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('std::string const &', 's')])
+    ## ccnx-name-components.h (module 'NDNabstraction'): std::list<std::string, std::allocator<std::string> > const & ns3::CcnxNameComponents::GetComponents() const [member function]
+    cls.add_method('GetComponents', 
+                   'std::list< std::string > const &', 
+                   [], 
+                   is_const=True)
+    ## ccnx-name-components.h (module 'NDNabstraction'): std::list<boost::reference_wrapper<std::string const>, std::allocator<boost::reference_wrapper<std::string const> > > ns3::CcnxNameComponents::GetSubComponents(size_t num) const [member function]
+    cls.add_method('GetSubComponents', 
+                   'std::list< boost::reference_wrapper< std::string const > >', 
+                   [param('size_t', 'num')], 
+                   is_const=True)
+    ## ccnx-name-components.h (module 'NDNabstraction'): void ns3::CcnxNameComponents::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## ccnx-name-components.h (module 'NDNabstraction'): size_t ns3::CcnxNameComponents::size() const [member function]
+    cls.add_method('size', 
+                   'size_t', 
+                   [], 
+                   is_const=True)
+    ## ccnx-name-components.h (module 'NDNabstraction'): ns3::CcnxNameComponents & ns3::CcnxNameComponents::operator()(std::string const & s) [member operator]
+    cls.add_method('operator()', 
+                   'ns3::CcnxNameComponents &', 
+                   [param('std::string const &', 's')], 
+                   custom_name='__call__')
+    return
+
+def register_Ns3CcnxNameComponentsChecker_methods(root_module, cls):
+    ## ccnx-name-components.h (module 'NDNabstraction'): ns3::CcnxNameComponentsChecker::CcnxNameComponentsChecker() [constructor]
+    cls.add_constructor([])
+    ## ccnx-name-components.h (module 'NDNabstraction'): ns3::CcnxNameComponentsChecker::CcnxNameComponentsChecker(ns3::CcnxNameComponentsChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxNameComponentsChecker const &', 'arg0')])
+    return
+
+def register_Ns3CcnxNameComponentsValue_methods(root_module, cls):
+    ## ccnx-name-components.h (module 'NDNabstraction'): ns3::CcnxNameComponentsValue::CcnxNameComponentsValue() [constructor]
+    cls.add_constructor([])
+    ## ccnx-name-components.h (module 'NDNabstraction'): ns3::CcnxNameComponentsValue::CcnxNameComponentsValue(ns3::CcnxNameComponentsValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxNameComponentsValue const &', 'arg0')])
+    ## ccnx-name-components.h (module 'NDNabstraction'): ns3::CcnxNameComponentsValue::CcnxNameComponentsValue(ns3::CcnxNameComponents const & value) [constructor]
+    cls.add_constructor([param('ns3::CcnxNameComponents const &', 'value')])
+    ## ccnx-name-components.h (module 'NDNabstraction'): ns3::Ptr<ns3::AttributeValue> ns3::CcnxNameComponentsValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ccnx-name-components.h (module 'NDNabstraction'): bool ns3::CcnxNameComponentsValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## ccnx-name-components.h (module 'NDNabstraction'): ns3::CcnxNameComponents ns3::CcnxNameComponentsValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::CcnxNameComponents', 
+                   [], 
+                   is_const=True)
+    ## ccnx-name-components.h (module 'NDNabstraction'): std::string ns3::CcnxNameComponentsValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## ccnx-name-components.h (module 'NDNabstraction'): void ns3::CcnxNameComponentsValue::Set(ns3::CcnxNameComponents const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::CcnxNameComponents const &', 'value')])
+    return
+
+def register_Ns3CcnxNetDeviceFace_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## ccnx-net-device-face.h (module 'NDNabstraction'): ns3::CcnxNetDeviceFace::CcnxNetDeviceFace(ns3::Ptr<ns3::NetDevice> const & netDevice) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::NetDevice > const &', 'netDevice')])
+    ## ccnx-net-device-face.h (module 'NDNabstraction'): ns3::Ptr<ns3::NetDevice> ns3::CcnxNetDeviceFace::GetNetDevice() const [member function]
+    cls.add_method('GetNetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
                    [], 
-                   is_const=True, visibility='private', is_virtual=True)
-    ## ccnx-local-face.h (module 'NDNabstraction'): void ns3::CcnxLocalFace::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
-    cls.add_method('SetDevice', 
+                   is_const=True)
+    ## ccnx-net-device-face.h (module 'NDNabstraction'): static ns3::TypeId ns3::CcnxNetDeviceFace::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ccnx-net-device-face.h (module 'NDNabstraction'): void ns3::CcnxNetDeviceFace::RegisterProtocolHandler(ns3::Callback<void, ns3::Ptr<ns3::CcnxFace> const&, ns3::Ptr<ns3::Packet const> const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> handler) [member function]
+    cls.add_method('RegisterProtocolHandler', 
                    'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::CcnxFace >, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'handler')], 
+                   is_virtual=True)
+    ## ccnx-net-device-face.h (module 'NDNabstraction'): void ns3::CcnxNetDeviceFace::Send(ns3::Ptr<ns3::Packet> p) [member function]
+    cls.add_method('Send', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   is_virtual=True)
+    ## ccnx-net-device-face.h (module 'NDNabstraction'): void ns3::CcnxNetDeviceFace::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3CcnxPit_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## ccnx-pit.h (module 'NDNabstraction'): ns3::CcnxPit::CcnxPit(ns3::CcnxPit const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxPit const &', 'arg0')])
+    ## ccnx-pit.h (module 'NDNabstraction'): ns3::CcnxPit::CcnxPit() [constructor]
+    cls.add_constructor([])
+    ## ccnx-pit.h (module 'NDNabstraction'): ns3::Time ns3::CcnxPit::GetCleanupTimeout() const [member function]
+    cls.add_method('GetCleanupTimeout', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## ccnx-pit.h (module 'NDNabstraction'): static ns3::TypeId ns3::CcnxPit::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ccnx-pit.h (module 'NDNabstraction'): ns3::CcnxPitEntry const & ns3::CcnxPit::Lookup(ns3::CcnxContentObjectHeader const & header) const [member function]
+    cls.add_method('Lookup', 
+                   'ns3::CcnxPitEntry const &', 
+                   [param('ns3::CcnxContentObjectHeader const &', 'header')], 
+                   is_const=True)
+    ## ccnx-pit.h (module 'NDNabstraction'): ns3::CcnxPitEntry const & ns3::CcnxPit::Lookup(ns3::CcnxInterestHeader const & header) const [member function]
+    cls.add_method('Lookup', 
+                   'ns3::CcnxPitEntry const &', 
+                   [param('ns3::CcnxInterestHeader const &', 'header')], 
+                   is_const=True)
+    ## ccnx-pit.h (module 'NDNabstraction'): void ns3::CcnxPit::SetCleanupTimeout(ns3::Time const & timeout) [member function]
+    cls.add_method('SetCleanupTimeout', 
+                   'void', 
+                   [param('ns3::Time const &', 'timeout')])
+    return
+
+def register_Ns3CcnxProducer_methods(root_module, cls):
+    ## ccnx-producer.h (module 'NDNabstraction'): ns3::CcnxProducer::CcnxProducer(ns3::CcnxProducer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxProducer const &', 'arg0')])
+    ## ccnx-producer.h (module 'NDNabstraction'): ns3::CcnxProducer::CcnxProducer() [constructor]
+    cls.add_constructor([])
+    ## ccnx-producer.h (module 'NDNabstraction'): void ns3::CcnxProducer::AddContentStoreEntry(ns3::Ptr<ns3::CcnxContentObjectHeader> header, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('AddContentStoreEntry', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::CcnxContentObjectHeader >', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## ccnx-producer.h (module 'NDNabstraction'): uint32_t ns3::CcnxProducer::GetStoreCapacity() [member function]
+    cls.add_method('GetStoreCapacity', 
+                   'uint32_t', 
+                   [])
+    ## ccnx-producer.h (module 'NDNabstraction'): static ns3::TypeId ns3::CcnxProducer::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ccnx-producer.h (module 'NDNabstraction'): void ns3::CcnxProducer::HandlePacket(ns3::Ptr<ns3::CcnxFace> const & face, ns3::Ptr<ns3::Packet const> const & packet) [member function]
+    cls.add_method('HandlePacket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::CcnxFace > const &', 'face'), param('ns3::Ptr< ns3::Packet const > const &', 'packet')])
+    ## ccnx-producer.h (module 'NDNabstraction'): void ns3::CcnxProducer::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ccnx-producer.h (module 'NDNabstraction'): void ns3::CcnxProducer::StartApplication() [member function]
+    cls.add_method('StartApplication', 
+                   'void', 
+                   [], 
                    visibility='private', is_virtual=True)
+    ## ccnx-producer.h (module 'NDNabstraction'): void ns3::CcnxProducer::StopApplication() [member function]
+    cls.add_method('StopApplication', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3CcnxRit_methods(root_module, cls):
+    ## ccnx-rit.h (module 'NDNabstraction'): ns3::CcnxRit::CcnxRit(ns3::CcnxRit const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnxRit const &', 'arg0')])
+    ## ccnx-rit.h (module 'NDNabstraction'): ns3::CcnxRit::CcnxRit() [constructor]
+    cls.add_constructor([])
+    ## ccnx-rit.h (module 'NDNabstraction'): ns3::Time ns3::CcnxRit::GetCleanupTimeout() const [member function]
+    cls.add_method('GetCleanupTimeout', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## ccnx-rit.h (module 'NDNabstraction'): ns3::Time ns3::CcnxRit::GetRitTimeout() const [member function]
+    cls.add_method('GetRitTimeout', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## ccnx-rit.h (module 'NDNabstraction'): static ns3::TypeId ns3::CcnxRit::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ccnx-rit.h (module 'NDNabstraction'): void ns3::CcnxRit::SetCleanupTimeout(ns3::Time const & timeout) [member function]
+    cls.add_method('SetCleanupTimeout', 
+                   'void', 
+                   [param('ns3::Time const &', 'timeout')])
+    ## ccnx-rit.h (module 'NDNabstraction'): void ns3::CcnxRit::SetRecentlySatisfied(ns3::CcnxInterestHeader const & header) [member function]
+    cls.add_method('SetRecentlySatisfied', 
+                   'void', 
+                   [param('ns3::CcnxInterestHeader const &', 'header')])
+    ## ccnx-rit.h (module 'NDNabstraction'): void ns3::CcnxRit::SetRitTimeout(ns3::Time const & timeout) [member function]
+    cls.add_method('SetRitTimeout', 
+                   'void', 
+                   [param('ns3::Time const &', 'timeout')])
+    ## ccnx-rit.h (module 'NDNabstraction'): bool ns3::CcnxRit::WasRecentlySatisfied(ns3::CcnxInterestHeader const & header) [member function]
+    cls.add_method('WasRecentlySatisfied', 
+                   'bool', 
+                   [param('ns3::CcnxInterestHeader const &', 'header')])
     return
 
 def register_Ns3CcnxRoute_methods(root_module, cls):
@@ -5070,19 +6162,94 @@
                    'ns3::Ptr< ns3::CcnxFace >', 
                    [], 
                    is_const=True)
-    ## ccnx-route.h (module 'NDNabstraction'): ns3::Name::Components const & ns3::CcnxRoute::GetPrefix() const [member function]
+    ## ccnx-route.h (module 'NDNabstraction'): ns3::CcnxNameComponents const & ns3::CcnxRoute::GetPrefix() const [member function]
     cls.add_method('GetPrefix', 
-                   'ns3::Name::Components const &', 
+                   'ns3::CcnxNameComponents const &', 
                    [], 
                    is_const=True)
     ## ccnx-route.h (module 'NDNabstraction'): void ns3::CcnxRoute::SetOutputFace(ns3::Ptr<ns3::CcnxFace> outputDevice) [member function]
     cls.add_method('SetOutputFace', 
                    'void', 
                    [param('ns3::Ptr< ns3::CcnxFace >', 'outputDevice')])
-    ## ccnx-route.h (module 'NDNabstraction'): void ns3::CcnxRoute::SetPrefix(ns3::Ptr<ns3::Name::Components> const & dest) [member function]
+    ## ccnx-route.h (module 'NDNabstraction'): void ns3::CcnxRoute::SetPrefix(ns3::Ptr<ns3::CcnxNameComponents> const & dest) [member function]
     cls.add_method('SetPrefix', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Name::Components > const &', 'dest')])
+                   [param('ns3::Ptr< ns3::CcnxNameComponents > const &', 'dest')])
+    return
+
+def register_Ns3DataRateChecker_methods(root_module, cls):
+    ## data-rate.h (module 'network'): ns3::DataRateChecker::DataRateChecker() [constructor]
+    cls.add_constructor([])
+    ## data-rate.h (module 'network'): ns3::DataRateChecker::DataRateChecker(ns3::DataRateChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataRateChecker const &', 'arg0')])
+    return
+
+def register_Ns3DataRateValue_methods(root_module, cls):
+    ## data-rate.h (module 'network'): ns3::DataRateValue::DataRateValue() [constructor]
+    cls.add_constructor([])
+    ## data-rate.h (module 'network'): ns3::DataRateValue::DataRateValue(ns3::DataRateValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataRateValue const &', 'arg0')])
+    ## data-rate.h (module 'network'): ns3::DataRateValue::DataRateValue(ns3::DataRate const & value) [constructor]
+    cls.add_constructor([param('ns3::DataRate const &', 'value')])
+    ## data-rate.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::DataRateValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## data-rate.h (module 'network'): bool ns3::DataRateValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## data-rate.h (module 'network'): ns3::DataRate ns3::DataRateValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::DataRate', 
+                   [], 
+                   is_const=True)
+    ## data-rate.h (module 'network'): std::string ns3::DataRateValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## data-rate.h (module 'network'): void ns3::DataRateValue::Set(ns3::DataRate const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::DataRate const &', 'value')])
+    return
+
+def register_Ns3DropTailQueue_methods(root_module, cls):
+    ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue::DropTailQueue(ns3::DropTailQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DropTailQueue const &', 'arg0')])
+    ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue::DropTailQueue() [constructor]
+    cls.add_constructor([])
+    ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue::Mode ns3::DropTailQueue::GetMode() [member function]
+    cls.add_method('GetMode', 
+                   'ns3::DropTailQueue::Mode', 
+                   [])
+    ## drop-tail-queue.h (module 'network'): static ns3::TypeId ns3::DropTailQueue::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## drop-tail-queue.h (module 'network'): void ns3::DropTailQueue::SetMode(ns3::DropTailQueue::Mode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::DropTailQueue::Mode', 'mode')])
+    ## drop-tail-queue.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::DropTailQueue::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## drop-tail-queue.h (module 'network'): bool ns3::DropTailQueue::DoEnqueue(ns3::Ptr<ns3::Packet> p) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   visibility='private', is_virtual=True)
+    ## drop-tail-queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::DropTailQueue::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3EmptyAttributeValue_methods(root_module, cls):
@@ -5324,6 +6491,46 @@
                    [param('ns3::Ipv6Prefix const &', 'value')])
     return
 
+def register_Ns3Mac48AddressChecker_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac48AddressValue_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
+    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac48Address const &', 'value')])
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -5439,15 +6646,15 @@
                    'void', 
                    [param('ns3::Ptr< ns3::Node >', 'node')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## net-device.h (module 'network'): void ns3::NetDevice::SetPromiscReceiveCallback(ns3::Callback<bool,ns3::Ptr<ns3::NetDevice>,ns3::Ptr<const ns3::Packet>,short unsigned int,const ns3::Address&,const ns3::Address&,ns3::NetDevice::PacketType,ns3::empty,ns3::empty,ns3::empty> cb) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::SetPromiscReceiveCallback(ns3::Callback<bool, ns3::Ptr<ns3::NetDevice>, ns3::Ptr<ns3::Packet const>, unsigned short, ns3::Address const&, ns3::Address const&, ns3::NetDevice::PacketType, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
     cls.add_method('SetPromiscReceiveCallback', 
                    'void', 
-                   [param('ns3::Callback< bool, ns3::Ptr< ns3::NetDevice >, ns3::Ptr< ns3::Packet const >, short unsigned int, ns3::Address const &, ns3::Address const &, ns3::NetDevice::PacketType, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   [param('ns3::Callback< bool, ns3::Ptr< ns3::NetDevice >, ns3::Ptr< ns3::Packet const >, unsigned short, ns3::Address const &, ns3::Address const &, ns3::NetDevice::PacketType, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## net-device.h (module 'network'): void ns3::NetDevice::SetReceiveCallback(ns3::Callback<bool,ns3::Ptr<ns3::NetDevice>,ns3::Ptr<const ns3::Packet>,short unsigned int,const ns3::Address&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> cb) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::SetReceiveCallback(ns3::Callback<bool, ns3::Ptr<ns3::NetDevice>, ns3::Ptr<ns3::Packet const>, unsigned short, ns3::Address const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
     cls.add_method('SetReceiveCallback', 
                    'void', 
-                   [param('ns3::Callback< bool, ns3::Ptr< ns3::NetDevice >, ns3::Ptr< ns3::Packet const >, short unsigned int, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   [param('ns3::Callback< bool, ns3::Ptr< ns3::NetDevice >, ns3::Ptr< ns3::Packet const >, unsigned short, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
                    is_pure_virtual=True, is_virtual=True)
     ## net-device.h (module 'network'): bool ns3::NetDevice::SupportsSendFrom() const [member function]
     cls.add_method('SupportsSendFrom', 
@@ -5648,7 +6855,7 @@
     cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size'), param('bool', 'magic')])
     ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size) [constructor]
     cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::AddAtEnd(ns3::Ptr<const ns3::Packet> packet) [member function]
+    ## packet.h (module 'network'): void ns3::Packet::AddAtEnd(ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet')])
@@ -5817,6 +7024,220 @@
                    [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
     return
 
+def register_Ns3PointToPointNetDevice_methods(root_module, cls):
+    ## point-to-point-net-device.h (module 'point-to-point'): static ns3::TypeId ns3::PointToPointNetDevice::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): ns3::PointToPointNetDevice::PointToPointNetDevice() [constructor]
+    cls.add_constructor([])
+    ## point-to-point-net-device.h (module 'point-to-point'): void ns3::PointToPointNetDevice::SetDataRate(ns3::DataRate bps) [member function]
+    cls.add_method('SetDataRate', 
+                   'void', 
+                   [param('ns3::DataRate', 'bps')])
+    ## point-to-point-net-device.h (module 'point-to-point'): void ns3::PointToPointNetDevice::SetInterframeGap(ns3::Time t) [member function]
+    cls.add_method('SetInterframeGap', 
+                   'void', 
+                   [param('ns3::Time', 't')])
+    ## point-to-point-net-device.h (module 'point-to-point'): bool ns3::PointToPointNetDevice::Attach(ns3::Ptr<ns3::PointToPointChannel> ch) [member function]
+    cls.add_method('Attach', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::PointToPointChannel >', 'ch')])
+    ## point-to-point-net-device.h (module 'point-to-point'): void ns3::PointToPointNetDevice::SetQueue(ns3::Ptr<ns3::Queue> queue) [member function]
+    cls.add_method('SetQueue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Queue >', 'queue')])
+    ## point-to-point-net-device.h (module 'point-to-point'): ns3::Ptr<ns3::Queue> ns3::PointToPointNetDevice::GetQueue() const [member function]
+    cls.add_method('GetQueue', 
+                   'ns3::Ptr< ns3::Queue >', 
+                   [], 
+                   is_const=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): void ns3::PointToPointNetDevice::SetReceiveErrorModel(ns3::Ptr<ns3::ErrorModel> em) [member function]
+    cls.add_method('SetReceiveErrorModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::ErrorModel >', 'em')])
+    ## point-to-point-net-device.h (module 'point-to-point'): void ns3::PointToPointNetDevice::Receive(ns3::Ptr<ns3::Packet> p) [member function]
+    cls.add_method('Receive', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## point-to-point-net-device.h (module 'point-to-point'): void ns3::PointToPointNetDevice::SetIfIndex(uint32_t const index) [member function]
+    cls.add_method('SetIfIndex', 
+                   'void', 
+                   [param('uint32_t const', 'index')], 
+                   is_virtual=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): uint32_t ns3::PointToPointNetDevice::GetIfIndex() const [member function]
+    cls.add_method('GetIfIndex', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): ns3::Ptr<ns3::Channel> ns3::PointToPointNetDevice::GetChannel() const [member function]
+    cls.add_method('GetChannel', 
+                   'ns3::Ptr< ns3::Channel >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): void ns3::PointToPointNetDevice::SetAddress(ns3::Address address) [member function]
+    cls.add_method('SetAddress', 
+                   'void', 
+                   [param('ns3::Address', 'address')], 
+                   is_virtual=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): ns3::Address ns3::PointToPointNetDevice::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): bool ns3::PointToPointNetDevice::SetMtu(uint16_t const mtu) [member function]
+    cls.add_method('SetMtu', 
+                   'bool', 
+                   [param('uint16_t const', 'mtu')], 
+                   is_virtual=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): uint16_t ns3::PointToPointNetDevice::GetMtu() const [member function]
+    cls.add_method('GetMtu', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): bool ns3::PointToPointNetDevice::IsLinkUp() const [member function]
+    cls.add_method('IsLinkUp', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): void ns3::PointToPointNetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    cls.add_method('AddLinkChangeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
+                   is_virtual=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): bool ns3::PointToPointNetDevice::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): ns3::Address ns3::PointToPointNetDevice::GetBroadcast() const [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): bool ns3::PointToPointNetDevice::IsMulticast() const [member function]
+    cls.add_method('IsMulticast', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): ns3::Address ns3::PointToPointNetDevice::GetMulticast(ns3::Ipv4Address multicastGroup) const [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Address', 
+                   [param('ns3::Ipv4Address', 'multicastGroup')], 
+                   is_const=True, is_virtual=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): bool ns3::PointToPointNetDevice::IsPointToPoint() const [member function]
+    cls.add_method('IsPointToPoint', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): bool ns3::PointToPointNetDevice::IsBridge() const [member function]
+    cls.add_method('IsBridge', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): bool ns3::PointToPointNetDevice::Send(ns3::Ptr<ns3::Packet> packet, ns3::Address const & dest, uint16_t protocolNumber) [member function]
+    cls.add_method('Send', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'dest'), param('uint16_t', 'protocolNumber')], 
+                   is_virtual=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): bool ns3::PointToPointNetDevice::SendFrom(ns3::Ptr<ns3::Packet> packet, ns3::Address const & source, ns3::Address const & dest, uint16_t protocolNumber) [member function]
+    cls.add_method('SendFrom', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'source'), param('ns3::Address const &', 'dest'), param('uint16_t', 'protocolNumber')], 
+                   is_virtual=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): ns3::Ptr<ns3::Node> ns3::PointToPointNetDevice::GetNode() const [member function]
+    cls.add_method('GetNode', 
+                   'ns3::Ptr< ns3::Node >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): void ns3::PointToPointNetDevice::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_virtual=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): bool ns3::PointToPointNetDevice::NeedsArp() const [member function]
+    cls.add_method('NeedsArp', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): void ns3::PointToPointNetDevice::SetReceiveCallback(ns3::Callback<bool, ns3::Ptr<ns3::NetDevice>, ns3::Ptr<ns3::Packet const>, unsigned short, ns3::Address const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetReceiveCallback', 
+                   'void', 
+                   [param('ns3::Callback< bool, ns3::Ptr< ns3::NetDevice >, ns3::Ptr< ns3::Packet const >, unsigned short, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): ns3::Address ns3::PointToPointNetDevice::GetMulticast(ns3::Ipv6Address addr) const [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Address', 
+                   [param('ns3::Ipv6Address', 'addr')], 
+                   is_const=True, is_virtual=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): void ns3::PointToPointNetDevice::SetPromiscReceiveCallback(ns3::Callback<bool, ns3::Ptr<ns3::NetDevice>, ns3::Ptr<ns3::Packet const>, unsigned short, ns3::Address const&, ns3::Address const&, ns3::NetDevice::PacketType, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetPromiscReceiveCallback', 
+                   'void', 
+                   [param('ns3::Callback< bool, ns3::Ptr< ns3::NetDevice >, ns3::Ptr< ns3::Packet const >, unsigned short, ns3::Address const &, ns3::Address const &, ns3::NetDevice::PacketType, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): bool ns3::PointToPointNetDevice::SupportsSendFrom() const [member function]
+    cls.add_method('SupportsSendFrom', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## point-to-point-net-device.h (module 'point-to-point'): void ns3::PointToPointNetDevice::DoMpiReceive(ns3::Ptr<ns3::Packet> p) [member function]
+    cls.add_method('DoMpiReceive', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   visibility='protected')
+    ## point-to-point-net-device.h (module 'point-to-point'): void ns3::PointToPointNetDevice::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3PointerChecker_methods(root_module, cls):
+    ## pointer.h (module 'core'): ns3::PointerChecker::PointerChecker() [constructor]
+    cls.add_constructor([])
+    ## pointer.h (module 'core'): ns3::PointerChecker::PointerChecker(ns3::PointerChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PointerChecker const &', 'arg0')])
+    ## pointer.h (module 'core'): ns3::TypeId ns3::PointerChecker::GetPointeeTypeId() const [member function]
+    cls.add_method('GetPointeeTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
+def register_Ns3PointerValue_methods(root_module, cls):
+    ## pointer.h (module 'core'): ns3::PointerValue::PointerValue(ns3::PointerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PointerValue const &', 'arg0')])
+    ## pointer.h (module 'core'): ns3::PointerValue::PointerValue() [constructor]
+    cls.add_constructor([])
+    ## pointer.h (module 'core'): ns3::PointerValue::PointerValue(ns3::Ptr<ns3::Object> object) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Object >', 'object')])
+    ## pointer.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::PointerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## pointer.h (module 'core'): bool ns3::PointerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## pointer.h (module 'core'): ns3::Ptr<ns3::Object> ns3::PointerValue::GetObject() const [member function]
+    cls.add_method('GetObject', 
+                   'ns3::Ptr< ns3::Object >', 
+                   [], 
+                   is_const=True)
+    ## pointer.h (module 'core'): std::string ns3::PointerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## pointer.h (module 'core'): void ns3::PointerValue::SetObject(ns3::Ptr<ns3::Object> object) [member function]
+    cls.add_method('SetObject', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Object >', 'object')])
+    return
+
 def register_Ns3RandomVariableChecker_methods(root_module, cls):
     ## random-variable.h (module 'core'): ns3::RandomVariableChecker::RandomVariableChecker() [constructor]
     cls.add_constructor([])
@@ -5857,6 +7278,46 @@
                    [param('ns3::RandomVariable const &', 'value')])
     return
 
+def register_Ns3StringChecker_methods(root_module, cls):
+    ## string.h (module 'core'): ns3::StringChecker::StringChecker() [constructor]
+    cls.add_constructor([])
+    ## string.h (module 'core'): ns3::StringChecker::StringChecker(ns3::StringChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::StringChecker const &', 'arg0')])
+    return
+
+def register_Ns3StringValue_methods(root_module, cls):
+    ## string.h (module 'core'): ns3::StringValue::StringValue() [constructor]
+    cls.add_constructor([])
+    ## string.h (module 'core'): ns3::StringValue::StringValue(ns3::StringValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::StringValue const &', 'arg0')])
+    ## string.h (module 'core'): ns3::StringValue::StringValue(std::string const & value) [constructor]
+    cls.add_constructor([param('std::string const &', 'value')])
+    ## string.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::StringValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## string.h (module 'core'): bool ns3::StringValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## string.h (module 'core'): std::string ns3::StringValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## string.h (module 'core'): std::string ns3::StringValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## string.h (module 'core'): void ns3::StringValue::Set(std::string const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('std::string const &', 'value')])
+    return
+
 def register_Ns3StupidInterestGenerator_methods(root_module, cls):
     ## stupid-interest-generator.h (module 'NDNabstraction'): ns3::StupidInterestGenerator::StupidInterestGenerator(ns3::StupidInterestGenerator const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::StupidInterestGenerator const &', 'arg0')])
@@ -6006,6 +7467,39 @@
                    [param('ns3::TypeId const &', 'value')])
     return
 
+def register_Ns3UintegerValue_methods(root_module, cls):
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue() [constructor]
+    cls.add_constructor([])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(ns3::UintegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::UintegerValue const &', 'arg0')])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(uint64_t const & value) [constructor]
+    cls.add_constructor([param('uint64_t const &', 'value')])
+    ## uinteger.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::UintegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): bool ns3::UintegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## uinteger.h (module 'core'): uint64_t ns3::UintegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## uinteger.h (module 'core'): std::string ns3::UintegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): void ns3::UintegerValue::Set(uint64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('uint64_t const &', 'value')])
+    return
+
 def register_Ns3AddressChecker_methods(root_module, cls):
     ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
     cls.add_constructor([])
@@ -6046,713 +7540,726 @@
                    [param('ns3::Address const &', 'value')])
     return
 
-def register_Ns3CcnxParserBlock_methods(root_module, cls):
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Block::Block() [constructor]
+def register_Ns3CcnbParserBlock_methods(root_module, cls):
+    ## ccnb-parser-block.h (module 'NDNabstraction'): ns3::CcnbParser::Block::Block() [constructor]
     cls.add_constructor([])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Block::Block(ns3::CcnxParser::Block const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxParser::Block const &', 'arg0')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): static ns3::Ptr<ns3::CcnxParser::Block> ns3::CcnxParser::Block::ParseBlock(ns3::Buffer::Iterator & start) [member function]
+    ## ccnb-parser-block.h (module 'NDNabstraction'): ns3::CcnbParser::Block::Block(ns3::CcnbParser::Block const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::Block const &', 'arg0')])
+    ## ccnb-parser-block.h (module 'NDNabstraction'): static ns3::Ptr<ns3::CcnbParser::Block> ns3::CcnbParser::Block::ParseBlock(ns3::Buffer::Iterator & start) [member function]
     cls.add_method('ParseBlock', 
-                   'ns3::Ptr< ns3::CcnxParser::Block >', 
+                   'ns3::Ptr< ns3::CcnbParser::Block >', 
                    [param('ns3::Buffer::Iterator &', 'start')], 
                    is_static=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::Block::accept(ns3::CcnxParser::Visitor & v) [member function]
+    ## ccnb-parser-block.h (module 'NDNabstraction'): void ns3::CcnbParser::Block::accept(ns3::CcnbParser::VoidNoArguVisitor & v) [member function]
     cls.add_method('accept', 
                    'void', 
-                   [param('ns3::CcnxParser::Visitor &', 'v')], 
+                   [param('ns3::CcnbParser::VoidNoArguVisitor &', 'v')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::Block::accept(ns3::CcnxParser::GJVoidVisitor & v, boost::any param) [member function]
+    ## ccnb-parser-block.h (module 'NDNabstraction'): void ns3::CcnbParser::Block::accept(ns3::CcnbParser::VoidVisitor & v, boost::any param) [member function]
     cls.add_method('accept', 
                    'void', 
-                   [param('ns3::CcnxParser::GJVoidVisitor &', 'v'), param('boost::any', 'param')], 
+                   [param('ns3::CcnbParser::VoidVisitor &', 'v'), param('boost::any', 'param')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::Block::accept(ns3::CcnxParser::GJNoArguVisitor & v) [member function]
+    ## ccnb-parser-block.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::Block::accept(ns3::CcnbParser::NoArguVisitor & v) [member function]
     cls.add_method('accept', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::GJNoArguVisitor &', 'v')], 
+                   [param('ns3::CcnbParser::NoArguVisitor &', 'v')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::Block::accept(ns3::CcnxParser::GJVisitor & v, boost::any param) [member function]
+    ## ccnb-parser-block.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::Block::accept(ns3::CcnbParser::Visitor & v, boost::any param) [member function]
     cls.add_method('accept', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::GJVisitor &', 'v'), param('boost::any', 'param')], 
+                   [param('ns3::CcnbParser::Visitor &', 'v'), param('boost::any', 'param')], 
                    is_pure_virtual=True, is_virtual=True)
     return
 
-def register_Ns3CcnxParserCcnxDecodingException_methods(root_module, cls):
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::CcnxDecodingException::CcnxDecodingException() [constructor]
+def register_Ns3CcnbParserCcnbDecodingException_methods(root_module, cls):
+    ## ccnb-parser-common.h (module 'NDNabstraction'): ns3::CcnbParser::CcnbDecodingException::CcnbDecodingException() [constructor]
     cls.add_constructor([])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::CcnxDecodingException::CcnxDecodingException(ns3::CcnxParser::CcnxDecodingException const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxParser::CcnxDecodingException const &', 'arg0')])
+    ## ccnb-parser-common.h (module 'NDNabstraction'): ns3::CcnbParser::CcnbDecodingException::CcnbDecodingException(ns3::CcnbParser::CcnbDecodingException const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::CcnbDecodingException const &', 'arg0')])
     return
 
-def register_Ns3CcnxParserDattr_methods(root_module, cls):
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Dattr::Dattr(ns3::CcnxParser::Dattr const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxParser::Dattr const &', 'arg0')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Dattr::Dattr(ns3::Buffer::Iterator & start, uint32_t dattr) [constructor]
-    cls.add_constructor([param('ns3::Buffer::Iterator &', 'start'), param('uint32_t', 'dattr')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::Dattr::accept(ns3::CcnxParser::Visitor & v) [member function]
-    cls.add_method('accept', 
-                   'void', 
-                   [param('ns3::CcnxParser::Visitor &', 'v')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::Dattr::accept(ns3::CcnxParser::GJVoidVisitor & v, boost::any param) [member function]
-    cls.add_method('accept', 
-                   'void', 
-                   [param('ns3::CcnxParser::GJVoidVisitor &', 'v'), param('boost::any', 'param')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::Dattr::accept(ns3::CcnxParser::GJNoArguVisitor & v) [member function]
-    cls.add_method('accept', 
-                   'boost::any', 
-                   [param('ns3::CcnxParser::GJNoArguVisitor &', 'v')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::Dattr::accept(ns3::CcnxParser::GJVisitor & v, boost::any param) [member function]
-    cls.add_method('accept', 
-                   'boost::any', 
-                   [param('ns3::CcnxParser::GJVisitor &', 'v'), param('boost::any', 'param')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Dattr::m_dattr [variable]
-    cls.add_instance_attribute('m_dattr', 'uint32_t', is_const=False)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Dattr::m_value [variable]
-    cls.add_instance_attribute('m_value', 'ns3::Ptr< ns3::CcnxParser::Udata >', is_const=False)
-    return
-
-def register_Ns3CcnxParserDtag_methods(root_module, cls):
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Dtag::Dtag(ns3::CcnxParser::Dtag const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxParser::Dtag const &', 'arg0')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Dtag::Dtag(ns3::Buffer::Iterator & start, uint32_t dtag) [constructor]
-    cls.add_constructor([param('ns3::Buffer::Iterator &', 'start'), param('uint32_t', 'dtag')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::Dtag::accept(ns3::CcnxParser::Visitor & v) [member function]
-    cls.add_method('accept', 
-                   'void', 
-                   [param('ns3::CcnxParser::Visitor &', 'v')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::Dtag::accept(ns3::CcnxParser::GJVoidVisitor & v, boost::any param) [member function]
-    cls.add_method('accept', 
-                   'void', 
-                   [param('ns3::CcnxParser::GJVoidVisitor &', 'v'), param('boost::any', 'param')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::Dtag::accept(ns3::CcnxParser::GJNoArguVisitor & v) [member function]
-    cls.add_method('accept', 
-                   'boost::any', 
-                   [param('ns3::CcnxParser::GJNoArguVisitor &', 'v')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::Dtag::accept(ns3::CcnxParser::GJVisitor & v, boost::any param) [member function]
-    cls.add_method('accept', 
-                   'boost::any', 
-                   [param('ns3::CcnxParser::GJVisitor &', 'v'), param('boost::any', 'param')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Dtag::m_dtag [variable]
-    cls.add_instance_attribute('m_dtag', 'uint32_t', is_const=False)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Dtag::m_nestedBlocks [variable]
-    cls.add_instance_attribute('m_nestedBlocks', 'std::list< ns3::Ptr< ns3::CcnxParser::Block > >', is_const=False)
-    return
-
-def register_Ns3CcnxParserExt_methods(root_module, cls):
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Ext::Ext(ns3::CcnxParser::Ext const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxParser::Ext const &', 'arg0')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Ext::Ext(ns3::Buffer::Iterator & start, uint32_t extSubtype) [constructor]
+def register_Ns3CcnbParserExt_methods(root_module, cls):
+    ## ccnb-parser-ext.h (module 'NDNabstraction'): ns3::CcnbParser::Ext::Ext(ns3::CcnbParser::Ext const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::Ext const &', 'arg0')])
+    ## ccnb-parser-ext.h (module 'NDNabstraction'): ns3::CcnbParser::Ext::Ext(ns3::Buffer::Iterator & start, uint32_t extSubtype) [constructor]
     cls.add_constructor([param('ns3::Buffer::Iterator &', 'start'), param('uint32_t', 'extSubtype')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::Ext::accept(ns3::CcnxParser::Visitor & v) [member function]
+    ## ccnb-parser-ext.h (module 'NDNabstraction'): void ns3::CcnbParser::Ext::accept(ns3::CcnbParser::VoidNoArguVisitor & v) [member function]
     cls.add_method('accept', 
                    'void', 
-                   [param('ns3::CcnxParser::Visitor &', 'v')], 
+                   [param('ns3::CcnbParser::VoidNoArguVisitor &', 'v')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::Ext::accept(ns3::CcnxParser::GJVoidVisitor & v, boost::any param) [member function]
+    ## ccnb-parser-ext.h (module 'NDNabstraction'): void ns3::CcnbParser::Ext::accept(ns3::CcnbParser::VoidVisitor & v, boost::any param) [member function]
     cls.add_method('accept', 
                    'void', 
-                   [param('ns3::CcnxParser::GJVoidVisitor &', 'v'), param('boost::any', 'param')], 
+                   [param('ns3::CcnbParser::VoidVisitor &', 'v'), param('boost::any', 'param')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::Ext::accept(ns3::CcnxParser::GJNoArguVisitor & v) [member function]
+    ## ccnb-parser-ext.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::Ext::accept(ns3::CcnbParser::NoArguVisitor & v) [member function]
     cls.add_method('accept', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::GJNoArguVisitor &', 'v')], 
+                   [param('ns3::CcnbParser::NoArguVisitor &', 'v')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::Ext::accept(ns3::CcnxParser::GJVisitor & v, boost::any param) [member function]
+    ## ccnb-parser-ext.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::Ext::accept(ns3::CcnbParser::Visitor & v, boost::any param) [member function]
     cls.add_method('accept', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::GJVisitor &', 'v'), param('boost::any', 'param')], 
+                   [param('ns3::CcnbParser::Visitor &', 'v'), param('boost::any', 'param')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Ext::m_extSubtype [variable]
+    ## ccnb-parser-ext.h (module 'NDNabstraction'): ns3::CcnbParser::Ext::m_extSubtype [variable]
     cls.add_instance_attribute('m_extSubtype', 'uint64_t', is_const=False)
     return
 
-def register_Ns3CcnxParserGJNoArguVisitor_methods(root_module, cls):
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::GJNoArguVisitor::GJNoArguVisitor() [constructor]
+def register_Ns3CcnbParserNoArguVisitor_methods(root_module, cls):
+    ## ccnb-parser-no-argu-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::NoArguVisitor::NoArguVisitor() [constructor]
     cls.add_constructor([])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::GJNoArguVisitor::GJNoArguVisitor(ns3::CcnxParser::GJNoArguVisitor const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxParser::GJNoArguVisitor const &', 'arg0')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJNoArguVisitor::visit(ns3::CcnxParser::Blob & arg0) [member function]
+    ## ccnb-parser-no-argu-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::NoArguVisitor::NoArguVisitor(ns3::CcnbParser::NoArguVisitor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::NoArguVisitor const &', 'arg0')])
+    ## ccnb-parser-no-argu-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::NoArguVisitor::visit(ns3::CcnbParser::Blob & arg0) [member function]
     cls.add_method('visit', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::Blob &', 'arg0')], 
+                   [param('ns3::CcnbParser::Blob &', 'arg0')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJNoArguVisitor::visit(ns3::CcnxParser::Udata & arg0) [member function]
+    ## ccnb-parser-no-argu-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::NoArguVisitor::visit(ns3::CcnbParser::Udata & arg0) [member function]
     cls.add_method('visit', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::Udata &', 'arg0')], 
+                   [param('ns3::CcnbParser::Udata &', 'arg0')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJNoArguVisitor::visit(ns3::CcnxParser::Tag & arg0) [member function]
+    ## ccnb-parser-no-argu-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::NoArguVisitor::visit(ns3::CcnbParser::Tag & arg0) [member function]
     cls.add_method('visit', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::Tag &', 'arg0')], 
+                   [param('ns3::CcnbParser::Tag &', 'arg0')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJNoArguVisitor::visit(ns3::CcnxParser::Attr & arg0) [member function]
+    ## ccnb-parser-no-argu-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::NoArguVisitor::visit(ns3::CcnbParser::Attr & arg0) [member function]
     cls.add_method('visit', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::Attr &', 'arg0')], 
+                   [param('ns3::CcnbParser::Attr &', 'arg0')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJNoArguVisitor::visit(ns3::CcnxParser::Dtag & arg0) [member function]
+    ## ccnb-parser-no-argu-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::NoArguVisitor::visit(ns3::CcnbParser::Dtag & arg0) [member function]
     cls.add_method('visit', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::Dtag &', 'arg0')], 
+                   [param('ns3::CcnbParser::Dtag &', 'arg0')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJNoArguVisitor::visit(ns3::CcnxParser::Dattr & arg0) [member function]
+    ## ccnb-parser-no-argu-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::NoArguVisitor::visit(ns3::CcnbParser::Dattr & arg0) [member function]
     cls.add_method('visit', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::Dattr &', 'arg0')], 
+                   [param('ns3::CcnbParser::Dattr &', 'arg0')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJNoArguVisitor::visit(ns3::CcnxParser::Ext & arg0) [member function]
+    ## ccnb-parser-no-argu-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::NoArguVisitor::visit(ns3::CcnbParser::Ext & arg0) [member function]
     cls.add_method('visit', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::Ext &', 'arg0')], 
+                   [param('ns3::CcnbParser::Ext &', 'arg0')], 
                    is_pure_virtual=True, is_virtual=True)
     return
 
-def register_Ns3CcnxParserGJVisitor_methods(root_module, cls):
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::GJVisitor::GJVisitor() [constructor]
-    cls.add_constructor([])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::GJVisitor::GJVisitor(ns3::CcnxParser::GJVisitor const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxParser::GJVisitor const &', 'arg0')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJVisitor::visit(ns3::CcnxParser::Blob & arg0, boost::any arg1) [member function]
-    cls.add_method('visit', 
-                   'boost::any', 
-                   [param('ns3::CcnxParser::Blob &', 'arg0'), param('boost::any', 'arg1')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJVisitor::visit(ns3::CcnxParser::Udata & arg0, boost::any arg1) [member function]
-    cls.add_method('visit', 
-                   'boost::any', 
-                   [param('ns3::CcnxParser::Udata &', 'arg0'), param('boost::any', 'arg1')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJVisitor::visit(ns3::CcnxParser::Tag & arg0, boost::any arg1) [member function]
-    cls.add_method('visit', 
-                   'boost::any', 
-                   [param('ns3::CcnxParser::Tag &', 'arg0'), param('boost::any', 'arg1')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJVisitor::visit(ns3::CcnxParser::Attr & arg0, boost::any arg1) [member function]
-    cls.add_method('visit', 
-                   'boost::any', 
-                   [param('ns3::CcnxParser::Attr &', 'arg0'), param('boost::any', 'arg1')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJVisitor::visit(ns3::CcnxParser::Dtag & arg0, boost::any arg1) [member function]
-    cls.add_method('visit', 
-                   'boost::any', 
-                   [param('ns3::CcnxParser::Dtag &', 'arg0'), param('boost::any', 'arg1')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJVisitor::visit(ns3::CcnxParser::Dattr & arg0, boost::any arg1) [member function]
-    cls.add_method('visit', 
-                   'boost::any', 
-                   [param('ns3::CcnxParser::Dattr &', 'arg0'), param('boost::any', 'arg1')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJVisitor::visit(ns3::CcnxParser::Ext & arg0, boost::any arg1) [member function]
-    cls.add_method('visit', 
-                   'boost::any', 
-                   [param('ns3::CcnxParser::Ext &', 'arg0'), param('boost::any', 'arg1')], 
-                   is_pure_virtual=True, is_virtual=True)
-    return
-
-def register_Ns3CcnxParserGJVoidVisitor_methods(root_module, cls):
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::GJVoidVisitor::GJVoidVisitor() [constructor]
-    cls.add_constructor([])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::GJVoidVisitor::GJVoidVisitor(ns3::CcnxParser::GJVoidVisitor const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxParser::GJVoidVisitor const &', 'arg0')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::GJVoidVisitor::visit(ns3::CcnxParser::Blob & arg0, boost::any arg1) [member function]
-    cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Blob &', 'arg0'), param('boost::any', 'arg1')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::GJVoidVisitor::visit(ns3::CcnxParser::Udata & arg0, boost::any arg1) [member function]
-    cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Udata &', 'arg0'), param('boost::any', 'arg1')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::GJVoidVisitor::visit(ns3::CcnxParser::Tag & arg0, boost::any arg1) [member function]
-    cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Tag &', 'arg0'), param('boost::any', 'arg1')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::GJVoidVisitor::visit(ns3::CcnxParser::Attr & arg0, boost::any arg1) [member function]
-    cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Attr &', 'arg0'), param('boost::any', 'arg1')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::GJVoidVisitor::visit(ns3::CcnxParser::Dtag & arg0, boost::any arg1) [member function]
-    cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Dtag &', 'arg0'), param('boost::any', 'arg1')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::GJVoidVisitor::visit(ns3::CcnxParser::Dattr & arg0, boost::any arg1) [member function]
-    cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Dattr &', 'arg0'), param('boost::any', 'arg1')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::GJVoidVisitor::visit(ns3::CcnxParser::Ext & arg0, boost::any arg1) [member function]
-    cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Ext &', 'arg0'), param('boost::any', 'arg1')], 
-                   is_pure_virtual=True, is_virtual=True)
-    return
-
-def register_Ns3CcnxParserTag_methods(root_module, cls):
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Tag::Tag(ns3::CcnxParser::Tag const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxParser::Tag const &', 'arg0')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Tag::Tag(ns3::Buffer::Iterator & start, uint32_t length) [constructor]
+def register_Ns3CcnbParserUdata_methods(root_module, cls):
+    ## ccnb-parser-udata.h (module 'NDNabstraction'): ns3::CcnbParser::Udata::Udata(ns3::CcnbParser::Udata const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::Udata const &', 'arg0')])
+    ## ccnb-parser-udata.h (module 'NDNabstraction'): ns3::CcnbParser::Udata::Udata(ns3::Buffer::Iterator & start, uint32_t length) [constructor]
     cls.add_constructor([param('ns3::Buffer::Iterator &', 'start'), param('uint32_t', 'length')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::Tag::accept(ns3::CcnxParser::Visitor & v) [member function]
+    ## ccnb-parser-udata.h (module 'NDNabstraction'): void ns3::CcnbParser::Udata::accept(ns3::CcnbParser::VoidNoArguVisitor & v) [member function]
     cls.add_method('accept', 
                    'void', 
-                   [param('ns3::CcnxParser::Visitor &', 'v')], 
+                   [param('ns3::CcnbParser::VoidNoArguVisitor &', 'v')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::Tag::accept(ns3::CcnxParser::GJVoidVisitor & v, boost::any param) [member function]
+    ## ccnb-parser-udata.h (module 'NDNabstraction'): void ns3::CcnbParser::Udata::accept(ns3::CcnbParser::VoidVisitor & v, boost::any param) [member function]
     cls.add_method('accept', 
                    'void', 
-                   [param('ns3::CcnxParser::GJVoidVisitor &', 'v'), param('boost::any', 'param')], 
+                   [param('ns3::CcnbParser::VoidVisitor &', 'v'), param('boost::any', 'param')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::Tag::accept(ns3::CcnxParser::GJNoArguVisitor & v) [member function]
+    ## ccnb-parser-udata.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::Udata::accept(ns3::CcnbParser::NoArguVisitor & v) [member function]
     cls.add_method('accept', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::GJNoArguVisitor &', 'v')], 
+                   [param('ns3::CcnbParser::NoArguVisitor &', 'v')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::Tag::accept(ns3::CcnxParser::GJVisitor & v, boost::any param) [member function]
+    ## ccnb-parser-udata.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::Udata::accept(ns3::CcnbParser::Visitor & v, boost::any param) [member function]
     cls.add_method('accept', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::GJVisitor &', 'v'), param('boost::any', 'param')], 
+                   [param('ns3::CcnbParser::Visitor &', 'v'), param('boost::any', 'param')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Tag::m_nestedBlocks [variable]
-    cls.add_instance_attribute('m_nestedBlocks', 'std::list< ns3::Ptr< ns3::CcnxParser::Block > >', is_const=False)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Tag::m_tag [variable]
-    cls.add_instance_attribute('m_tag', 'std::string', is_const=False)
-    return
-
-def register_Ns3CcnxParserUdata_methods(root_module, cls):
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Udata::Udata(ns3::CcnxParser::Udata const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxParser::Udata const &', 'arg0')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Udata::Udata(ns3::Buffer::Iterator & start, uint32_t length) [constructor]
-    cls.add_constructor([param('ns3::Buffer::Iterator &', 'start'), param('uint32_t', 'length')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::Udata::accept(ns3::CcnxParser::Visitor & v) [member function]
-    cls.add_method('accept', 
-                   'void', 
-                   [param('ns3::CcnxParser::Visitor &', 'v')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::Udata::accept(ns3::CcnxParser::GJVoidVisitor & v, boost::any param) [member function]
-    cls.add_method('accept', 
-                   'void', 
-                   [param('ns3::CcnxParser::GJVoidVisitor &', 'v'), param('boost::any', 'param')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::Udata::accept(ns3::CcnxParser::GJNoArguVisitor & v) [member function]
-    cls.add_method('accept', 
-                   'boost::any', 
-                   [param('ns3::CcnxParser::GJNoArguVisitor &', 'v')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::Udata::accept(ns3::CcnxParser::GJVisitor & v, boost::any param) [member function]
-    cls.add_method('accept', 
-                   'boost::any', 
-                   [param('ns3::CcnxParser::GJVisitor &', 'v'), param('boost::any', 'param')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Udata::m_udata [variable]
+    ## ccnb-parser-udata.h (module 'NDNabstraction'): ns3::CcnbParser::Udata::m_udata [variable]
     cls.add_instance_attribute('m_udata', 'std::string', is_const=False)
     return
 
-def register_Ns3CcnxParserVisitor_methods(root_module, cls):
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Visitor::Visitor() [constructor]
+def register_Ns3CcnbParserVisitor_methods(root_module, cls):
+    ## ccnb-parser-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::Visitor::Visitor() [constructor]
     cls.add_constructor([])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Visitor::Visitor(ns3::CcnxParser::Visitor const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxParser::Visitor const &', 'arg0')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::Visitor::visit(ns3::CcnxParser::Blob & arg0) [member function]
+    ## ccnb-parser-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::Visitor::Visitor(ns3::CcnbParser::Visitor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::Visitor const &', 'arg0')])
+    ## ccnb-parser-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::Visitor::visit(ns3::CcnbParser::Blob & arg0, boost::any arg1) [member function]
     cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Blob &', 'arg0')], 
+                   'boost::any', 
+                   [param('ns3::CcnbParser::Blob &', 'arg0'), param('boost::any', 'arg1')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::Visitor::visit(ns3::CcnxParser::Udata & arg0) [member function]
+    ## ccnb-parser-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::Visitor::visit(ns3::CcnbParser::Udata & arg0, boost::any arg1) [member function]
     cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Udata &', 'arg0')], 
+                   'boost::any', 
+                   [param('ns3::CcnbParser::Udata &', 'arg0'), param('boost::any', 'arg1')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::Visitor::visit(ns3::CcnxParser::Tag & arg0) [member function]
+    ## ccnb-parser-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::Visitor::visit(ns3::CcnbParser::Tag & arg0, boost::any arg1) [member function]
     cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Tag &', 'arg0')], 
+                   'boost::any', 
+                   [param('ns3::CcnbParser::Tag &', 'arg0'), param('boost::any', 'arg1')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::Visitor::visit(ns3::CcnxParser::Attr & arg0) [member function]
+    ## ccnb-parser-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::Visitor::visit(ns3::CcnbParser::Attr & arg0, boost::any arg1) [member function]
     cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Attr &', 'arg0')], 
+                   'boost::any', 
+                   [param('ns3::CcnbParser::Attr &', 'arg0'), param('boost::any', 'arg1')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::Visitor::visit(ns3::CcnxParser::Dtag & arg0) [member function]
+    ## ccnb-parser-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::Visitor::visit(ns3::CcnbParser::Dtag & arg0, boost::any arg1) [member function]
     cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Dtag &', 'arg0')], 
+                   'boost::any', 
+                   [param('ns3::CcnbParser::Dtag &', 'arg0'), param('boost::any', 'arg1')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::Visitor::visit(ns3::CcnxParser::Dattr & arg0) [member function]
+    ## ccnb-parser-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::Visitor::visit(ns3::CcnbParser::Dattr & arg0, boost::any arg1) [member function]
     cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Dattr &', 'arg0')], 
+                   'boost::any', 
+                   [param('ns3::CcnbParser::Dattr &', 'arg0'), param('boost::any', 'arg1')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::Visitor::visit(ns3::CcnxParser::Ext & arg0) [member function]
+    ## ccnb-parser-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::Visitor::visit(ns3::CcnbParser::Ext & arg0, boost::any arg1) [member function]
     cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Ext &', 'arg0')], 
+                   'boost::any', 
+                   [param('ns3::CcnbParser::Ext &', 'arg0'), param('boost::any', 'arg1')], 
                    is_pure_virtual=True, is_virtual=True)
     return
 
-def register_Ns3CcnxParserAttr_methods(root_module, cls):
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Attr::Attr(ns3::CcnxParser::Attr const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxParser::Attr const &', 'arg0')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Attr::Attr(ns3::Buffer::Iterator & start, uint32_t length) [constructor]
-    cls.add_constructor([param('ns3::Buffer::Iterator &', 'start'), param('uint32_t', 'length')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::Attr::accept(ns3::CcnxParser::Visitor & v) [member function]
-    cls.add_method('accept', 
+def register_Ns3CcnbParserVoidNoArguVisitor_methods(root_module, cls):
+    ## ccnb-parser-void-no-argu-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::VoidNoArguVisitor::VoidNoArguVisitor() [constructor]
+    cls.add_constructor([])
+    ## ccnb-parser-void-no-argu-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::VoidNoArguVisitor::VoidNoArguVisitor(ns3::CcnbParser::VoidNoArguVisitor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::VoidNoArguVisitor const &', 'arg0')])
+    ## ccnb-parser-void-no-argu-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidNoArguVisitor::visit(ns3::CcnbParser::Blob & arg0) [member function]
+    cls.add_method('visit', 
                    'void', 
-                   [param('ns3::CcnxParser::Visitor &', 'v')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::Attr::accept(ns3::CcnxParser::GJVoidVisitor & v, boost::any param) [member function]
-    cls.add_method('accept', 
+                   [param('ns3::CcnbParser::Blob &', 'arg0')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ccnb-parser-void-no-argu-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidNoArguVisitor::visit(ns3::CcnbParser::Udata & arg0) [member function]
+    cls.add_method('visit', 
                    'void', 
-                   [param('ns3::CcnxParser::GJVoidVisitor &', 'v'), param('boost::any', 'param')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::Attr::accept(ns3::CcnxParser::GJNoArguVisitor & v) [member function]
-    cls.add_method('accept', 
-                   'boost::any', 
-                   [param('ns3::CcnxParser::GJNoArguVisitor &', 'v')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::Attr::accept(ns3::CcnxParser::GJVisitor & v, boost::any param) [member function]
-    cls.add_method('accept', 
-                   'boost::any', 
-                   [param('ns3::CcnxParser::GJVisitor &', 'v'), param('boost::any', 'param')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Attr::m_attr [variable]
-    cls.add_instance_attribute('m_attr', 'std::string', is_const=False)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Attr::m_value [variable]
-    cls.add_instance_attribute('m_value', 'ns3::Ptr< ns3::CcnxParser::Udata >', is_const=False)
+                   [param('ns3::CcnbParser::Udata &', 'arg0')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ccnb-parser-void-no-argu-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidNoArguVisitor::visit(ns3::CcnbParser::Tag & arg0) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Tag &', 'arg0')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ccnb-parser-void-no-argu-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidNoArguVisitor::visit(ns3::CcnbParser::Attr & arg0) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Attr &', 'arg0')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ccnb-parser-void-no-argu-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidNoArguVisitor::visit(ns3::CcnbParser::Dtag & arg0) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Dtag &', 'arg0')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ccnb-parser-void-no-argu-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidNoArguVisitor::visit(ns3::CcnbParser::Dattr & arg0) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Dattr &', 'arg0')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ccnb-parser-void-no-argu-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidNoArguVisitor::visit(ns3::CcnbParser::Ext & arg0) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Ext &', 'arg0')], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
-def register_Ns3CcnxParserBlob_methods(root_module, cls):
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Blob::Blob(ns3::CcnxParser::Blob const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxParser::Blob const &', 'arg0')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Blob::Blob(ns3::Buffer::Iterator & start, uint32_t length) [constructor]
+def register_Ns3CcnbParserVoidVisitor_methods(root_module, cls):
+    ## ccnb-parser-void-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::VoidVisitor::VoidVisitor() [constructor]
+    cls.add_constructor([])
+    ## ccnb-parser-void-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::VoidVisitor::VoidVisitor(ns3::CcnbParser::VoidVisitor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::VoidVisitor const &', 'arg0')])
+    ## ccnb-parser-void-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidVisitor::visit(ns3::CcnbParser::Blob & arg0, boost::any arg1) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Blob &', 'arg0'), param('boost::any', 'arg1')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ccnb-parser-void-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidVisitor::visit(ns3::CcnbParser::Udata & arg0, boost::any arg1) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Udata &', 'arg0'), param('boost::any', 'arg1')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ccnb-parser-void-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidVisitor::visit(ns3::CcnbParser::Tag & arg0, boost::any arg1) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Tag &', 'arg0'), param('boost::any', 'arg1')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ccnb-parser-void-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidVisitor::visit(ns3::CcnbParser::Attr & arg0, boost::any arg1) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Attr &', 'arg0'), param('boost::any', 'arg1')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ccnb-parser-void-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidVisitor::visit(ns3::CcnbParser::Dtag & arg0, boost::any arg1) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Dtag &', 'arg0'), param('boost::any', 'arg1')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ccnb-parser-void-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidVisitor::visit(ns3::CcnbParser::Dattr & arg0, boost::any arg1) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Dattr &', 'arg0'), param('boost::any', 'arg1')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ccnb-parser-void-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidVisitor::visit(ns3::CcnbParser::Ext & arg0, boost::any arg1) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Ext &', 'arg0'), param('boost::any', 'arg1')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3CcnbParserBaseAttr_methods(root_module, cls):
+    ## ccnb-parser-base-attr.h (module 'NDNabstraction'): ns3::CcnbParser::BaseAttr::BaseAttr() [constructor]
+    cls.add_constructor([])
+    ## ccnb-parser-base-attr.h (module 'NDNabstraction'): ns3::CcnbParser::BaseAttr::BaseAttr(ns3::CcnbParser::BaseAttr const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::BaseAttr const &', 'arg0')])
+    ## ccnb-parser-base-attr.h (module 'NDNabstraction'): ns3::CcnbParser::BaseAttr::m_value [variable]
+    cls.add_instance_attribute('m_value', 'ns3::Ptr< ns3::CcnbParser::Udata >', is_const=False)
+    return
+
+def register_Ns3CcnbParserBaseTag_methods(root_module, cls):
+    ## ccnb-parser-base-tag.h (module 'NDNabstraction'): ns3::CcnbParser::BaseTag::BaseTag(ns3::CcnbParser::BaseTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::BaseTag const &', 'arg0')])
+    ## ccnb-parser-base-tag.h (module 'NDNabstraction'): ns3::CcnbParser::BaseTag::m_attrs [variable]
+    cls.add_instance_attribute('m_attrs', 'std::list< ns3::Ptr< ns3::CcnbParser::Block > >', is_const=False)
+    ## ccnb-parser-base-tag.h (module 'NDNabstraction'): ns3::CcnbParser::BaseTag::m_nestedTags [variable]
+    cls.add_instance_attribute('m_nestedTags', 'std::list< ns3::Ptr< ns3::CcnbParser::Block > >', is_const=False)
+    ## ccnb-parser-base-tag.h (module 'NDNabstraction'): ns3::CcnbParser::BaseTag::BaseTag() [constructor]
+    cls.add_constructor([], 
+                        visibility='protected')
+    return
+
+def register_Ns3CcnbParserBlob_methods(root_module, cls):
+    ## ccnb-parser-blob.h (module 'NDNabstraction'): ns3::CcnbParser::Blob::Blob(ns3::CcnbParser::Blob const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::Blob const &', 'arg0')])
+    ## ccnb-parser-blob.h (module 'NDNabstraction'): ns3::CcnbParser::Blob::Blob(ns3::Buffer::Iterator & start, uint32_t length) [constructor]
     cls.add_constructor([param('ns3::Buffer::Iterator &', 'start'), param('uint32_t', 'length')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::Blob::accept(ns3::CcnxParser::Visitor & v) [member function]
+    ## ccnb-parser-blob.h (module 'NDNabstraction'): void ns3::CcnbParser::Blob::accept(ns3::CcnbParser::VoidNoArguVisitor & v) [member function]
     cls.add_method('accept', 
                    'void', 
-                   [param('ns3::CcnxParser::Visitor &', 'v')], 
+                   [param('ns3::CcnbParser::VoidNoArguVisitor &', 'v')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::Blob::accept(ns3::CcnxParser::GJVoidVisitor & v, boost::any param) [member function]
+    ## ccnb-parser-blob.h (module 'NDNabstraction'): void ns3::CcnbParser::Blob::accept(ns3::CcnbParser::VoidVisitor & v, boost::any param) [member function]
     cls.add_method('accept', 
                    'void', 
-                   [param('ns3::CcnxParser::GJVoidVisitor &', 'v'), param('boost::any', 'param')], 
+                   [param('ns3::CcnbParser::VoidVisitor &', 'v'), param('boost::any', 'param')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::Blob::accept(ns3::CcnxParser::GJNoArguVisitor & v) [member function]
+    ## ccnb-parser-blob.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::Blob::accept(ns3::CcnbParser::NoArguVisitor & v) [member function]
     cls.add_method('accept', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::GJNoArguVisitor &', 'v')], 
+                   [param('ns3::CcnbParser::NoArguVisitor &', 'v')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::Blob::accept(ns3::CcnxParser::GJVisitor & v, boost::any param) [member function]
+    ## ccnb-parser-blob.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::Blob::accept(ns3::CcnbParser::Visitor & v, boost::any param) [member function]
     cls.add_method('accept', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::GJVisitor &', 'v'), param('boost::any', 'param')], 
+                   [param('ns3::CcnbParser::Visitor &', 'v'), param('boost::any', 'param')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::Blob::m_blob [variable]
+    ## ccnb-parser-blob.h (module 'NDNabstraction'): ns3::CcnbParser::Blob::m_blob [variable]
     cls.add_instance_attribute('m_blob', 'ns3::Buffer', is_const=False)
     return
 
-def register_Ns3CcnxParserDepthFirstVisitor_methods(root_module, cls):
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::DepthFirstVisitor::DepthFirstVisitor() [constructor]
+def register_Ns3CcnbParserDattr_methods(root_module, cls):
+    ## ccnb-parser-dattr.h (module 'NDNabstraction'): ns3::CcnbParser::Dattr::Dattr(ns3::CcnbParser::Dattr const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::Dattr const &', 'arg0')])
+    ## ccnb-parser-dattr.h (module 'NDNabstraction'): ns3::CcnbParser::Dattr::Dattr(ns3::Buffer::Iterator & start, uint32_t dattr) [constructor]
+    cls.add_constructor([param('ns3::Buffer::Iterator &', 'start'), param('uint32_t', 'dattr')])
+    ## ccnb-parser-dattr.h (module 'NDNabstraction'): void ns3::CcnbParser::Dattr::accept(ns3::CcnbParser::VoidNoArguVisitor & v) [member function]
+    cls.add_method('accept', 
+                   'void', 
+                   [param('ns3::CcnbParser::VoidNoArguVisitor &', 'v')], 
+                   is_virtual=True)
+    ## ccnb-parser-dattr.h (module 'NDNabstraction'): void ns3::CcnbParser::Dattr::accept(ns3::CcnbParser::VoidVisitor & v, boost::any param) [member function]
+    cls.add_method('accept', 
+                   'void', 
+                   [param('ns3::CcnbParser::VoidVisitor &', 'v'), param('boost::any', 'param')], 
+                   is_virtual=True)
+    ## ccnb-parser-dattr.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::Dattr::accept(ns3::CcnbParser::NoArguVisitor & v) [member function]
+    cls.add_method('accept', 
+                   'boost::any', 
+                   [param('ns3::CcnbParser::NoArguVisitor &', 'v')], 
+                   is_virtual=True)
+    ## ccnb-parser-dattr.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::Dattr::accept(ns3::CcnbParser::Visitor & v, boost::any param) [member function]
+    cls.add_method('accept', 
+                   'boost::any', 
+                   [param('ns3::CcnbParser::Visitor &', 'v'), param('boost::any', 'param')], 
+                   is_virtual=True)
+    ## ccnb-parser-dattr.h (module 'NDNabstraction'): ns3::CcnbParser::Dattr::m_dattr [variable]
+    cls.add_instance_attribute('m_dattr', 'uint32_t', is_const=False)
+    return
+
+def register_Ns3CcnbParserDepthFirstVisitor_methods(root_module, cls):
+    ## ccnb-parser-depth-first-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::DepthFirstVisitor::DepthFirstVisitor() [constructor]
     cls.add_constructor([])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::DepthFirstVisitor::DepthFirstVisitor(ns3::CcnxParser::DepthFirstVisitor const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxParser::DepthFirstVisitor const &', 'arg0')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::DepthFirstVisitor::visit(ns3::CcnxParser::Blob & arg0) [member function]
+    ## ccnb-parser-depth-first-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::DepthFirstVisitor::DepthFirstVisitor(ns3::CcnbParser::DepthFirstVisitor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::DepthFirstVisitor const &', 'arg0')])
+    ## ccnb-parser-depth-first-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::DepthFirstVisitor::visit(ns3::CcnbParser::Blob & arg0, boost::any arg1) [member function]
     cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Blob &', 'arg0')], 
+                   'boost::any', 
+                   [param('ns3::CcnbParser::Blob &', 'arg0'), param('boost::any', 'arg1')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::DepthFirstVisitor::visit(ns3::CcnxParser::Udata & arg0) [member function]
+    ## ccnb-parser-depth-first-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::DepthFirstVisitor::visit(ns3::CcnbParser::Udata & arg0, boost::any arg1) [member function]
     cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Udata &', 'arg0')], 
+                   'boost::any', 
+                   [param('ns3::CcnbParser::Udata &', 'arg0'), param('boost::any', 'arg1')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::DepthFirstVisitor::visit(ns3::CcnxParser::Tag & arg0) [member function]
+    ## ccnb-parser-depth-first-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::DepthFirstVisitor::visit(ns3::CcnbParser::Tag & arg0, boost::any arg1) [member function]
     cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Tag &', 'arg0')], 
+                   'boost::any', 
+                   [param('ns3::CcnbParser::Tag &', 'arg0'), param('boost::any', 'arg1')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::DepthFirstVisitor::visit(ns3::CcnxParser::Attr & arg0) [member function]
+    ## ccnb-parser-depth-first-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::DepthFirstVisitor::visit(ns3::CcnbParser::Attr & arg0, boost::any arg1) [member function]
     cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Attr &', 'arg0')], 
+                   'boost::any', 
+                   [param('ns3::CcnbParser::Attr &', 'arg0'), param('boost::any', 'arg1')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::DepthFirstVisitor::visit(ns3::CcnxParser::Dtag & arg0) [member function]
+    ## ccnb-parser-depth-first-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::DepthFirstVisitor::visit(ns3::CcnbParser::Dtag & arg0, boost::any arg1) [member function]
     cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Dtag &', 'arg0')], 
+                   'boost::any', 
+                   [param('ns3::CcnbParser::Dtag &', 'arg0'), param('boost::any', 'arg1')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::DepthFirstVisitor::visit(ns3::CcnxParser::Dattr & arg0) [member function]
+    ## ccnb-parser-depth-first-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::DepthFirstVisitor::visit(ns3::CcnbParser::Dattr & arg0, boost::any arg1) [member function]
     cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Dattr &', 'arg0')], 
+                   'boost::any', 
+                   [param('ns3::CcnbParser::Dattr &', 'arg0'), param('boost::any', 'arg1')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::DepthFirstVisitor::visit(ns3::CcnxParser::Ext & arg0) [member function]
+    ## ccnb-parser-depth-first-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::DepthFirstVisitor::visit(ns3::CcnbParser::Ext & arg0, boost::any arg1) [member function]
     cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Ext &', 'arg0')], 
+                   'boost::any', 
+                   [param('ns3::CcnbParser::Ext &', 'arg0'), param('boost::any', 'arg1')], 
                    is_virtual=True)
     return
 
-def register_Ns3CcnxParserGJDepthFirstVisitor_methods(root_module, cls):
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::GJDepthFirstVisitor::GJDepthFirstVisitor() [constructor]
+def register_Ns3CcnbParserDtag_methods(root_module, cls):
+    ## ccnb-parser-dtag.h (module 'NDNabstraction'): ns3::CcnbParser::Dtag::Dtag(ns3::CcnbParser::Dtag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::Dtag const &', 'arg0')])
+    ## ccnb-parser-dtag.h (module 'NDNabstraction'): ns3::CcnbParser::Dtag::Dtag(ns3::Buffer::Iterator & start, uint32_t dtag) [constructor]
+    cls.add_constructor([param('ns3::Buffer::Iterator &', 'start'), param('uint32_t', 'dtag')])
+    ## ccnb-parser-dtag.h (module 'NDNabstraction'): void ns3::CcnbParser::Dtag::accept(ns3::CcnbParser::VoidNoArguVisitor & v) [member function]
+    cls.add_method('accept', 
+                   'void', 
+                   [param('ns3::CcnbParser::VoidNoArguVisitor &', 'v')], 
+                   is_virtual=True)
+    ## ccnb-parser-dtag.h (module 'NDNabstraction'): void ns3::CcnbParser::Dtag::accept(ns3::CcnbParser::VoidVisitor & v, boost::any param) [member function]
+    cls.add_method('accept', 
+                   'void', 
+                   [param('ns3::CcnbParser::VoidVisitor &', 'v'), param('boost::any', 'param')], 
+                   is_virtual=True)
+    ## ccnb-parser-dtag.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::Dtag::accept(ns3::CcnbParser::NoArguVisitor & v) [member function]
+    cls.add_method('accept', 
+                   'boost::any', 
+                   [param('ns3::CcnbParser::NoArguVisitor &', 'v')], 
+                   is_virtual=True)
+    ## ccnb-parser-dtag.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::Dtag::accept(ns3::CcnbParser::Visitor & v, boost::any param) [member function]
+    cls.add_method('accept', 
+                   'boost::any', 
+                   [param('ns3::CcnbParser::Visitor &', 'v'), param('boost::any', 'param')], 
+                   is_virtual=True)
+    ## ccnb-parser-dtag.h (module 'NDNabstraction'): ns3::CcnbParser::Dtag::m_dtag [variable]
+    cls.add_instance_attribute('m_dtag', 'uint32_t', is_const=False)
+    return
+
+def register_Ns3CcnbParserNoArguDepthFirstVisitor_methods(root_module, cls):
+    ## ccnb-parser-no-argu-depth-first-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::NoArguDepthFirstVisitor::NoArguDepthFirstVisitor() [constructor]
     cls.add_constructor([])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::GJDepthFirstVisitor::GJDepthFirstVisitor(ns3::CcnxParser::GJDepthFirstVisitor const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxParser::GJDepthFirstVisitor const &', 'arg0')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJDepthFirstVisitor::visit(ns3::CcnxParser::Blob & arg0, boost::any arg1) [member function]
+    ## ccnb-parser-no-argu-depth-first-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::NoArguDepthFirstVisitor::NoArguDepthFirstVisitor(ns3::CcnbParser::NoArguDepthFirstVisitor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::NoArguDepthFirstVisitor const &', 'arg0')])
+    ## ccnb-parser-no-argu-depth-first-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::NoArguDepthFirstVisitor::visit(ns3::CcnbParser::Blob & arg0) [member function]
     cls.add_method('visit', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::Blob &', 'arg0'), param('boost::any', 'arg1')], 
+                   [param('ns3::CcnbParser::Blob &', 'arg0')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJDepthFirstVisitor::visit(ns3::CcnxParser::Udata & arg0, boost::any arg1) [member function]
+    ## ccnb-parser-no-argu-depth-first-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::NoArguDepthFirstVisitor::visit(ns3::CcnbParser::Udata & arg0) [member function]
     cls.add_method('visit', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::Udata &', 'arg0'), param('boost::any', 'arg1')], 
+                   [param('ns3::CcnbParser::Udata &', 'arg0')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJDepthFirstVisitor::visit(ns3::CcnxParser::Tag & arg0, boost::any arg1) [member function]
+    ## ccnb-parser-no-argu-depth-first-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::NoArguDepthFirstVisitor::visit(ns3::CcnbParser::Tag & arg0) [member function]
     cls.add_method('visit', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::Tag &', 'arg0'), param('boost::any', 'arg1')], 
+                   [param('ns3::CcnbParser::Tag &', 'arg0')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJDepthFirstVisitor::visit(ns3::CcnxParser::Attr & arg0, boost::any arg1) [member function]
+    ## ccnb-parser-no-argu-depth-first-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::NoArguDepthFirstVisitor::visit(ns3::CcnbParser::Attr & arg0) [member function]
     cls.add_method('visit', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::Attr &', 'arg0'), param('boost::any', 'arg1')], 
+                   [param('ns3::CcnbParser::Attr &', 'arg0')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJDepthFirstVisitor::visit(ns3::CcnxParser::Dtag & arg0, boost::any arg1) [member function]
+    ## ccnb-parser-no-argu-depth-first-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::NoArguDepthFirstVisitor::visit(ns3::CcnbParser::Dtag & arg0) [member function]
     cls.add_method('visit', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::Dtag &', 'arg0'), param('boost::any', 'arg1')], 
+                   [param('ns3::CcnbParser::Dtag &', 'arg0')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJDepthFirstVisitor::visit(ns3::CcnxParser::Dattr & arg0, boost::any arg1) [member function]
+    ## ccnb-parser-no-argu-depth-first-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::NoArguDepthFirstVisitor::visit(ns3::CcnbParser::Dattr & arg0) [member function]
     cls.add_method('visit', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::Dattr &', 'arg0'), param('boost::any', 'arg1')], 
+                   [param('ns3::CcnbParser::Dattr &', 'arg0')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJDepthFirstVisitor::visit(ns3::CcnxParser::Ext & arg0, boost::any arg1) [member function]
+    ## ccnb-parser-no-argu-depth-first-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::NoArguDepthFirstVisitor::visit(ns3::CcnbParser::Ext & arg0) [member function]
     cls.add_method('visit', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::Ext &', 'arg0'), param('boost::any', 'arg1')], 
+                   [param('ns3::CcnbParser::Ext &', 'arg0')], 
                    is_virtual=True)
     return
 
-def register_Ns3CcnxParserGJNoArguDepthFirstVisitor_methods(root_module, cls):
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::GJNoArguDepthFirstVisitor::GJNoArguDepthFirstVisitor() [constructor]
+def register_Ns3CcnbParserNonNegativeIntegerVisitor_methods(root_module, cls):
+    ## ccnb-parser-non-negative-integer-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::NonNegativeIntegerVisitor::NonNegativeIntegerVisitor() [constructor]
     cls.add_constructor([])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::GJNoArguDepthFirstVisitor::GJNoArguDepthFirstVisitor(ns3::CcnxParser::GJNoArguDepthFirstVisitor const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxParser::GJNoArguDepthFirstVisitor const &', 'arg0')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJNoArguDepthFirstVisitor::visit(ns3::CcnxParser::Blob & arg0) [member function]
+    ## ccnb-parser-non-negative-integer-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::NonNegativeIntegerVisitor::NonNegativeIntegerVisitor(ns3::CcnbParser::NonNegativeIntegerVisitor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::NonNegativeIntegerVisitor const &', 'arg0')])
+    ## ccnb-parser-non-negative-integer-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::NonNegativeIntegerVisitor::visit(ns3::CcnbParser::Blob & n) [member function]
     cls.add_method('visit', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::Blob &', 'arg0')], 
+                   [param('ns3::CcnbParser::Blob &', 'n')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJNoArguDepthFirstVisitor::visit(ns3::CcnxParser::Udata & arg0) [member function]
+    ## ccnb-parser-non-negative-integer-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::NonNegativeIntegerVisitor::visit(ns3::CcnbParser::Udata & n) [member function]
     cls.add_method('visit', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::Udata &', 'arg0')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJNoArguDepthFirstVisitor::visit(ns3::CcnxParser::Tag & arg0) [member function]
-    cls.add_method('visit', 
-                   'boost::any', 
-                   [param('ns3::CcnxParser::Tag &', 'arg0')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJNoArguDepthFirstVisitor::visit(ns3::CcnxParser::Attr & arg0) [member function]
-    cls.add_method('visit', 
-                   'boost::any', 
-                   [param('ns3::CcnxParser::Attr &', 'arg0')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJNoArguDepthFirstVisitor::visit(ns3::CcnxParser::Dtag & arg0) [member function]
-    cls.add_method('visit', 
-                   'boost::any', 
-                   [param('ns3::CcnxParser::Dtag &', 'arg0')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJNoArguDepthFirstVisitor::visit(ns3::CcnxParser::Dattr & arg0) [member function]
-    cls.add_method('visit', 
-                   'boost::any', 
-                   [param('ns3::CcnxParser::Dattr &', 'arg0')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::GJNoArguDepthFirstVisitor::visit(ns3::CcnxParser::Ext & arg0) [member function]
-    cls.add_method('visit', 
-                   'boost::any', 
-                   [param('ns3::CcnxParser::Ext &', 'arg0')], 
+                   [param('ns3::CcnbParser::Udata &', 'n')], 
                    is_virtual=True)
     return
 
-def register_Ns3CcnxParserGJVoidDepthFirstVisitor_methods(root_module, cls):
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::GJVoidDepthFirstVisitor::GJVoidDepthFirstVisitor() [constructor]
+def register_Ns3CcnbParserNonceVisitor_methods(root_module, cls):
+    ## ccnb-parser-nonce-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::NonceVisitor::NonceVisitor() [constructor]
     cls.add_constructor([])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::GJVoidDepthFirstVisitor::GJVoidDepthFirstVisitor(ns3::CcnxParser::GJVoidDepthFirstVisitor const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxParser::GJVoidDepthFirstVisitor const &', 'arg0')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::GJVoidDepthFirstVisitor::visit(ns3::CcnxParser::Blob & arg0, boost::any arg1) [member function]
-    cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Blob &', 'arg0'), param('boost::any', 'arg1')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::GJVoidDepthFirstVisitor::visit(ns3::CcnxParser::Udata & arg0, boost::any arg1) [member function]
-    cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Udata &', 'arg0'), param('boost::any', 'arg1')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::GJVoidDepthFirstVisitor::visit(ns3::CcnxParser::Tag & arg0, boost::any arg1) [member function]
-    cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Tag &', 'arg0'), param('boost::any', 'arg1')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::GJVoidDepthFirstVisitor::visit(ns3::CcnxParser::Attr & arg0, boost::any arg1) [member function]
-    cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Attr &', 'arg0'), param('boost::any', 'arg1')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::GJVoidDepthFirstVisitor::visit(ns3::CcnxParser::Dtag & arg0, boost::any arg1) [member function]
-    cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Dtag &', 'arg0'), param('boost::any', 'arg1')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::GJVoidDepthFirstVisitor::visit(ns3::CcnxParser::Dattr & arg0, boost::any arg1) [member function]
-    cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Dattr &', 'arg0'), param('boost::any', 'arg1')], 
-                   is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::GJVoidDepthFirstVisitor::visit(ns3::CcnxParser::Ext & arg0, boost::any arg1) [member function]
-    cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Ext &', 'arg0'), param('boost::any', 'arg1')], 
-                   is_virtual=True)
-    return
-
-def register_Ns3CcnxParserInterestVisitor_methods(root_module, cls):
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::InterestVisitor::InterestVisitor() [constructor]
-    cls.add_constructor([])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::InterestVisitor::InterestVisitor(ns3::CcnxParser::InterestVisitor const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxParser::InterestVisitor const &', 'arg0')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::InterestVisitor::visit(ns3::CcnxParser::Dtag & n, boost::any param) [member function]
-    cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Dtag &', 'n'), param('boost::any', 'param')], 
-                   is_virtual=True)
-    return
-
-def register_Ns3CcnxParserNameComponentsVisitor_methods(root_module, cls):
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::NameComponentsVisitor::NameComponentsVisitor() [constructor]
-    cls.add_constructor([])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::NameComponentsVisitor::NameComponentsVisitor(ns3::CcnxParser::NameComponentsVisitor const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxParser::NameComponentsVisitor const &', 'arg0')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::NameComponentsVisitor::visit(ns3::CcnxParser::Dtag & n, boost::any param) [member function]
-    cls.add_method('visit', 
-                   'void', 
-                   [param('ns3::CcnxParser::Dtag &', 'n'), param('boost::any', 'param')], 
-                   is_virtual=True)
-    return
-
-def register_Ns3CcnxParserNonNegativeIntegerVisitor_methods(root_module, cls):
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::NonNegativeIntegerVisitor::NonNegativeIntegerVisitor() [constructor]
-    cls.add_constructor([])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::NonNegativeIntegerVisitor::NonNegativeIntegerVisitor(ns3::CcnxParser::NonNegativeIntegerVisitor const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxParser::NonNegativeIntegerVisitor const &', 'arg0')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::NonNegativeIntegerVisitor::visit(ns3::CcnxParser::Blob & n) [member function]
+    ## ccnb-parser-nonce-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::NonceVisitor::NonceVisitor(ns3::CcnbParser::NonceVisitor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::NonceVisitor const &', 'arg0')])
+    ## ccnb-parser-nonce-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::NonceVisitor::visit(ns3::CcnbParser::Blob & n) [member function]
     cls.add_method('visit', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::Blob &', 'n')], 
+                   [param('ns3::CcnbParser::Blob &', 'n')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::NonNegativeIntegerVisitor::visit(ns3::CcnxParser::Udata & n) [member function]
+    ## ccnb-parser-nonce-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::NonceVisitor::visit(ns3::CcnbParser::Udata & n) [member function]
     cls.add_method('visit', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::Udata &', 'n')], 
+                   [param('ns3::CcnbParser::Udata &', 'n')], 
                    is_virtual=True)
     return
 
-def register_Ns3CcnxParserStringVisitor_methods(root_module, cls):
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::StringVisitor::StringVisitor() [constructor]
+def register_Ns3CcnbParserStringVisitor_methods(root_module, cls):
+    ## ccnb-parser-string-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::StringVisitor::StringVisitor() [constructor]
     cls.add_constructor([])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::StringVisitor::StringVisitor(ns3::CcnxParser::StringVisitor const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxParser::StringVisitor const &', 'arg0')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::StringVisitor::visit(ns3::CcnxParser::Blob & n) [member function]
+    ## ccnb-parser-string-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::StringVisitor::StringVisitor(ns3::CcnbParser::StringVisitor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::StringVisitor const &', 'arg0')])
+    ## ccnb-parser-string-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::StringVisitor::visit(ns3::CcnbParser::Blob & n) [member function]
     cls.add_method('visit', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::Blob &', 'n')], 
+                   [param('ns3::CcnbParser::Blob &', 'n')], 
                    is_virtual=True)
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): boost::any ns3::CcnxParser::StringVisitor::visit(ns3::CcnxParser::Udata & n) [member function]
+    ## ccnb-parser-string-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::StringVisitor::visit(ns3::CcnbParser::Udata & n) [member function]
     cls.add_method('visit', 
                    'boost::any', 
-                   [param('ns3::CcnxParser::Udata &', 'n')], 
+                   [param('ns3::CcnbParser::Udata &', 'n')], 
                    is_virtual=True)
     return
 
-def register_Ns3CcnxParserContentObjectVisitor_methods(root_module, cls):
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::ContentObjectVisitor::ContentObjectVisitor() [constructor]
-    cls.add_constructor([])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): ns3::CcnxParser::ContentObjectVisitor::ContentObjectVisitor(ns3::CcnxParser::ContentObjectVisitor const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CcnxParser::ContentObjectVisitor const &', 'arg0')])
-    ## ccnx-decoding-helper.h (module 'NDNabstraction'): void ns3::CcnxParser::ContentObjectVisitor::visit(ns3::CcnxParser::Dtag & n, boost::any param) [member function]
-    cls.add_method('visit', 
+def register_Ns3CcnbParserTag_methods(root_module, cls):
+    ## ccnb-parser-tag.h (module 'NDNabstraction'): ns3::CcnbParser::Tag::Tag(ns3::CcnbParser::Tag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::Tag const &', 'arg0')])
+    ## ccnb-parser-tag.h (module 'NDNabstraction'): ns3::CcnbParser::Tag::Tag(ns3::Buffer::Iterator & start, uint32_t length) [constructor]
+    cls.add_constructor([param('ns3::Buffer::Iterator &', 'start'), param('uint32_t', 'length')])
+    ## ccnb-parser-tag.h (module 'NDNabstraction'): void ns3::CcnbParser::Tag::accept(ns3::CcnbParser::VoidNoArguVisitor & v) [member function]
+    cls.add_method('accept', 
                    'void', 
-                   [param('ns3::CcnxParser::Dtag &', 'n'), param('boost::any', 'param')], 
+                   [param('ns3::CcnbParser::VoidNoArguVisitor &', 'v')], 
+                   is_virtual=True)
+    ## ccnb-parser-tag.h (module 'NDNabstraction'): void ns3::CcnbParser::Tag::accept(ns3::CcnbParser::VoidVisitor & v, boost::any param) [member function]
+    cls.add_method('accept', 
+                   'void', 
+                   [param('ns3::CcnbParser::VoidVisitor &', 'v'), param('boost::any', 'param')], 
+                   is_virtual=True)
+    ## ccnb-parser-tag.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::Tag::accept(ns3::CcnbParser::NoArguVisitor & v) [member function]
+    cls.add_method('accept', 
+                   'boost::any', 
+                   [param('ns3::CcnbParser::NoArguVisitor &', 'v')], 
+                   is_virtual=True)
+    ## ccnb-parser-tag.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::Tag::accept(ns3::CcnbParser::Visitor & v, boost::any param) [member function]
+    cls.add_method('accept', 
+                   'boost::any', 
+                   [param('ns3::CcnbParser::Visitor &', 'v'), param('boost::any', 'param')], 
+                   is_virtual=True)
+    ## ccnb-parser-tag.h (module 'NDNabstraction'): ns3::CcnbParser::Tag::m_tag [variable]
+    cls.add_instance_attribute('m_tag', 'std::string', is_const=False)
+    return
+
+def register_Ns3CcnbParserTimestampVisitor_methods(root_module, cls):
+    ## ccnb-parser-timestamp-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::TimestampVisitor::TimestampVisitor() [constructor]
+    cls.add_constructor([])
+    ## ccnb-parser-timestamp-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::TimestampVisitor::TimestampVisitor(ns3::CcnbParser::TimestampVisitor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::TimestampVisitor const &', 'arg0')])
+    ## ccnb-parser-timestamp-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::TimestampVisitor::visit(ns3::CcnbParser::Blob & n) [member function]
+    cls.add_method('visit', 
+                   'boost::any', 
+                   [param('ns3::CcnbParser::Blob &', 'n')], 
+                   is_virtual=True)
+    ## ccnb-parser-timestamp-visitor.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::TimestampVisitor::visit(ns3::CcnbParser::Udata & n) [member function]
+    cls.add_method('visit', 
+                   'boost::any', 
+                   [param('ns3::CcnbParser::Udata &', 'n')], 
                    is_virtual=True)
     return
 
-def register_Ns3NameComponents_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## name-components.h (module 'NDNabstraction'): ns3::Name::Components::Components(ns3::Name::Components const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Name::Components const &', 'arg0')])
-    ## name-components.h (module 'NDNabstraction'): ns3::Name::Components::Components() [constructor]
+def register_Ns3CcnbParserVoidDepthFirstVisitor_methods(root_module, cls):
+    ## ccnb-parser-void-depth-first-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::VoidDepthFirstVisitor::VoidDepthFirstVisitor() [constructor]
     cls.add_constructor([])
-    ## name-components.h (module 'NDNabstraction'): ns3::Name::Components::Components(std::string const & s) [constructor]
-    cls.add_constructor([param('std::string const &', 's')])
-    ## name-components.h (module 'NDNabstraction'): void ns3::Name::Components::Add(std::string const & s) [member function]
-    cls.add_method('Add', 
+    ## ccnb-parser-void-depth-first-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::VoidDepthFirstVisitor::VoidDepthFirstVisitor(ns3::CcnbParser::VoidDepthFirstVisitor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::VoidDepthFirstVisitor const &', 'arg0')])
+    ## ccnb-parser-void-depth-first-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidDepthFirstVisitor::visit(ns3::CcnbParser::Blob & arg0, boost::any arg1) [member function]
+    cls.add_method('visit', 
                    'void', 
-                   [param('std::string const &', 's')])
-    ## name-components.h (module 'NDNabstraction'): std::list<std::string, std::allocator<std::string> > const & ns3::Name::Components::GetComponents() const [member function]
-    cls.add_method('GetComponents', 
-                   'std::list< std::string > const &', 
-                   [], 
-                   is_const=True)
-    ## name-components.h (module 'NDNabstraction'): void ns3::Name::Components::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
+                   [param('ns3::CcnbParser::Blob &', 'arg0'), param('boost::any', 'arg1')], 
+                   is_virtual=True)
+    ## ccnb-parser-void-depth-first-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidDepthFirstVisitor::visit(ns3::CcnbParser::Udata & arg0, boost::any arg1) [member function]
+    cls.add_method('visit', 
                    'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## name-components.h (module 'NDNabstraction'): size_t ns3::Name::Components::size() const [member function]
-    cls.add_method('size', 
-                   'size_t', 
-                   [], 
-                   is_const=True)
-    ## name-components.h (module 'NDNabstraction'): ns3::Name::Components & ns3::Name::Components::operator()(std::string const & s) [member operator]
-    cls.add_method('operator()', 
-                   'ns3::Name::Components &', 
-                   [param('std::string const &', 's')], 
-                   custom_name='__call__')
+                   [param('ns3::CcnbParser::Udata &', 'arg0'), param('boost::any', 'arg1')], 
+                   is_virtual=True)
+    ## ccnb-parser-void-depth-first-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidDepthFirstVisitor::visit(ns3::CcnbParser::Tag & arg0, boost::any arg1) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Tag &', 'arg0'), param('boost::any', 'arg1')], 
+                   is_virtual=True)
+    ## ccnb-parser-void-depth-first-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidDepthFirstVisitor::visit(ns3::CcnbParser::Attr & arg0, boost::any arg1) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Attr &', 'arg0'), param('boost::any', 'arg1')], 
+                   is_virtual=True)
+    ## ccnb-parser-void-depth-first-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidDepthFirstVisitor::visit(ns3::CcnbParser::Dtag & arg0, boost::any arg1) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Dtag &', 'arg0'), param('boost::any', 'arg1')], 
+                   is_virtual=True)
+    ## ccnb-parser-void-depth-first-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidDepthFirstVisitor::visit(ns3::CcnbParser::Dattr & arg0, boost::any arg1) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Dattr &', 'arg0'), param('boost::any', 'arg1')], 
+                   is_virtual=True)
+    ## ccnb-parser-void-depth-first-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidDepthFirstVisitor::visit(ns3::CcnbParser::Ext & arg0, boost::any arg1) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Ext &', 'arg0'), param('boost::any', 'arg1')], 
+                   is_virtual=True)
+    return
+
+def register_Ns3CcnbParserVoidNoArguDepthFirstVisitor_methods(root_module, cls):
+    ## ccnb-parser-void-no-argu-depth-first-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::VoidNoArguDepthFirstVisitor::VoidNoArguDepthFirstVisitor() [constructor]
+    cls.add_constructor([])
+    ## ccnb-parser-void-no-argu-depth-first-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::VoidNoArguDepthFirstVisitor::VoidNoArguDepthFirstVisitor(ns3::CcnbParser::VoidNoArguDepthFirstVisitor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::VoidNoArguDepthFirstVisitor const &', 'arg0')])
+    ## ccnb-parser-void-no-argu-depth-first-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidNoArguDepthFirstVisitor::visit(ns3::CcnbParser::Blob & arg0) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Blob &', 'arg0')], 
+                   is_virtual=True)
+    ## ccnb-parser-void-no-argu-depth-first-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidNoArguDepthFirstVisitor::visit(ns3::CcnbParser::Udata & arg0) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Udata &', 'arg0')], 
+                   is_virtual=True)
+    ## ccnb-parser-void-no-argu-depth-first-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidNoArguDepthFirstVisitor::visit(ns3::CcnbParser::Tag & arg0) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Tag &', 'arg0')], 
+                   is_virtual=True)
+    ## ccnb-parser-void-no-argu-depth-first-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidNoArguDepthFirstVisitor::visit(ns3::CcnbParser::Attr & arg0) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Attr &', 'arg0')], 
+                   is_virtual=True)
+    ## ccnb-parser-void-no-argu-depth-first-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidNoArguDepthFirstVisitor::visit(ns3::CcnbParser::Dtag & arg0) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Dtag &', 'arg0')], 
+                   is_virtual=True)
+    ## ccnb-parser-void-no-argu-depth-first-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidNoArguDepthFirstVisitor::visit(ns3::CcnbParser::Dattr & arg0) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Dattr &', 'arg0')], 
+                   is_virtual=True)
+    ## ccnb-parser-void-no-argu-depth-first-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::VoidNoArguDepthFirstVisitor::visit(ns3::CcnbParser::Ext & arg0) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Ext &', 'arg0')], 
+                   is_virtual=True)
+    return
+
+def register_Ns3CcnbParserAttr_methods(root_module, cls):
+    ## ccnb-parser-attr.h (module 'NDNabstraction'): ns3::CcnbParser::Attr::Attr(ns3::CcnbParser::Attr const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::Attr const &', 'arg0')])
+    ## ccnb-parser-attr.h (module 'NDNabstraction'): ns3::CcnbParser::Attr::Attr(ns3::Buffer::Iterator & start, uint32_t length) [constructor]
+    cls.add_constructor([param('ns3::Buffer::Iterator &', 'start'), param('uint32_t', 'length')])
+    ## ccnb-parser-attr.h (module 'NDNabstraction'): void ns3::CcnbParser::Attr::accept(ns3::CcnbParser::VoidNoArguVisitor & v) [member function]
+    cls.add_method('accept', 
+                   'void', 
+                   [param('ns3::CcnbParser::VoidNoArguVisitor &', 'v')], 
+                   is_virtual=True)
+    ## ccnb-parser-attr.h (module 'NDNabstraction'): void ns3::CcnbParser::Attr::accept(ns3::CcnbParser::VoidVisitor & v, boost::any param) [member function]
+    cls.add_method('accept', 
+                   'void', 
+                   [param('ns3::CcnbParser::VoidVisitor &', 'v'), param('boost::any', 'param')], 
+                   is_virtual=True)
+    ## ccnb-parser-attr.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::Attr::accept(ns3::CcnbParser::NoArguVisitor & v) [member function]
+    cls.add_method('accept', 
+                   'boost::any', 
+                   [param('ns3::CcnbParser::NoArguVisitor &', 'v')], 
+                   is_virtual=True)
+    ## ccnb-parser-attr.h (module 'NDNabstraction'): boost::any ns3::CcnbParser::Attr::accept(ns3::CcnbParser::Visitor & v, boost::any param) [member function]
+    cls.add_method('accept', 
+                   'boost::any', 
+                   [param('ns3::CcnbParser::Visitor &', 'v'), param('boost::any', 'param')], 
+                   is_virtual=True)
+    ## ccnb-parser-attr.h (module 'NDNabstraction'): ns3::CcnbParser::Attr::m_attr [variable]
+    cls.add_instance_attribute('m_attr', 'std::string', is_const=False)
+    return
+
+def register_Ns3CcnbParserContentObjectVisitor_methods(root_module, cls):
+    ## ccnb-parser-content-object-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::ContentObjectVisitor::ContentObjectVisitor() [constructor]
+    cls.add_constructor([])
+    ## ccnb-parser-content-object-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::ContentObjectVisitor::ContentObjectVisitor(ns3::CcnbParser::ContentObjectVisitor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::ContentObjectVisitor const &', 'arg0')])
+    ## ccnb-parser-content-object-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::ContentObjectVisitor::visit(ns3::CcnbParser::Dtag & n, boost::any param) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Dtag &', 'n'), param('boost::any', 'param')], 
+                   is_virtual=True)
+    return
+
+def register_Ns3CcnbParserInterestVisitor_methods(root_module, cls):
+    ## ccnb-parser-interest-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::InterestVisitor::InterestVisitor() [constructor]
+    cls.add_constructor([])
+    ## ccnb-parser-interest-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::InterestVisitor::InterestVisitor(ns3::CcnbParser::InterestVisitor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::InterestVisitor const &', 'arg0')])
+    ## ccnb-parser-interest-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::InterestVisitor::visit(ns3::CcnbParser::Dtag & n, boost::any param) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Dtag &', 'n'), param('boost::any', 'param')], 
+                   is_virtual=True)
+    return
+
+def register_Ns3CcnbParserNameComponentsVisitor_methods(root_module, cls):
+    ## ccnb-parser-name-components-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::NameComponentsVisitor::NameComponentsVisitor() [constructor]
+    cls.add_constructor([])
+    ## ccnb-parser-name-components-visitor.h (module 'NDNabstraction'): ns3::CcnbParser::NameComponentsVisitor::NameComponentsVisitor(ns3::CcnbParser::NameComponentsVisitor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CcnbParser::NameComponentsVisitor const &', 'arg0')])
+    ## ccnb-parser-name-components-visitor.h (module 'NDNabstraction'): void ns3::CcnbParser::NameComponentsVisitor::visit(ns3::CcnbParser::Dtag & n, boost::any param) [member function]
+    cls.add_method('visit', 
+                   'void', 
+                   [param('ns3::CcnbParser::Dtag &', 'n'), param('boost::any', 'param')], 
+                   is_virtual=True)
     return
 
 def register_functions(root_module):
     module = root_module
-    register_functions_ns3_CcnxParser(module.get_submodule('CcnxParser'), root_module)
+    ## ccnx-name-components.h (module 'NDNabstraction'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeCcnxNameComponentsChecker() [free function]
+    module.add_function('MakeCcnxNameComponentsChecker', 
+                        'ns3::Ptr< ns3::AttributeChecker const >', 
+                        [])
+    register_functions_ns3_CcnbParser(module.get_submodule('CcnbParser'), root_module)
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
-    register_functions_ns3_Name(module.get_submodule('Name'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
-def register_functions_ns3_CcnxParser(module, root_module):
+def register_functions_ns3_CcnbParser(module, root_module):
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
     return
 
-def register_functions_ns3_Name(module, root_module):
-    return
-
 def register_functions_ns3_internal(module, root_module):
     return
 
