Class SegmentedNetworkDatabaseFacade
java.lang.Object
net.i2p.router.networkdb.kademlia.SegmentedNetworkDatabaseFacade
- Direct Known Subclasses:
DummyNetworkDatabaseSegmentor
,FloodfillNetworkDatabaseSegmentor
SegmentedNetworkDatabaseFacade
This class implements an interface for managing many netDbs as part of a
single I2P instance, each representing it's own view of the network. This
allows the I2P clients to operate agnostic of what information the other
clients are obtaining from the network database, and prevents information
intended for clients from entering the table used by the router for
Floodfill operations.
The benefit of this is that we can use this to provide an effective barrier
against "Context-Confusion" attacks which exploit the fact that messages sent
to clients can update the routing table used by a floodfill, providing
evidence that the floodfill hosts the corresponding client. When applied
correctly, so that every client uses a unique subDb, the entire class of attack
should be neutralized.
The drawback of this is that it makes the netDb less efficient. Clients and
Floodfills who share a netDb can update the tables used by those netDbs when
a Client encounters an entry obtained by a Floodfill or vice-versa. Clients also
must sometimes search the netDb for keys that are owned by other clients or by
a co-located Floodfill, if one exists.
In some contexts, it makes sense to view all the tables at once, especially when
viewing information from the UI. The functions 'getLeases*', 'getRouters*', and
'getLocalClient*' are provided for this purpose.
In the future, this could also be extended to provide Whanau-like functionality
by determining when clients and the local floodfill disagree on the content of a
leaseSet.
See implementation: FloodfillNetworkDatabaseSegmentor
- Since:
- 0.9.61
- Author:
- idk
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionabstract NetworkDatabaseFacade
clientNetDB
(Hash dbid) Get a client netDb for a given client Hash identifier.abstract NetworkDatabaseFacade
Get the main netDb, the one which is used if we're a floodfillabstract void
shutdown()
Shut down the network databasesabstract void
startup()
Start up the network databases
-
Constructor Details
-
SegmentedNetworkDatabaseFacade
public SegmentedNetworkDatabaseFacade()
-
-
Method Details
-
mainNetDB
Get the main netDb, the one which is used if we're a floodfill- Returns:
- may be null if main netDb is not initialized
- Since:
- 0.9.61
-
clientNetDB
Get a client netDb for a given client Hash identifier. Will never return the mainNetDB.- Returns:
- may be null if the client netDb does not exist
- Since:
- 0.9.61
-
shutdown
public abstract void shutdown()Shut down the network databases- Since:
- 0.9.61
-
startup
public abstract void startup()Start up the network databases- Since:
- 0.9.61
-