Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
R
railgun-routing-server
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Railgun
railgun-routing-server
Commits
5ab08d3c
Commit
5ab08d3c
authored
Dec 17, 2025
by
nanamicat
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
online
parent
eb9f9b66
Pipeline
#42003
passed with stages
in 44 seconds
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
6 additions
and
6 deletions
+6
-6
src/main.rs
src/main.rs
+1
-1
src/router.rs
src/router.rs
+5
-5
No files found.
src/main.rs
View file @
5ab08d3c
...
@@ -37,7 +37,7 @@ async fn main() -> Result<()> {
...
@@ -37,7 +37,7 @@ async fn main() -> Result<()> {
// let routers_map: BTreeMap<u8, RouterData> = routers_data.iter().map(|r| (r.id, r.clone())).collect();
// let routers_map: BTreeMap<u8, RouterData> = routers_data.iter().map(|r| (r.id, r.clone())).collect();
// let routers_map = Arc::new(routers_map);
// let routers_map = Arc::new(routers_map);
let
routers
:
BTreeMap
<
u8
,
Router
>
=
routers_data
.iter
()
.map
(|
c
|
(
c
.id
,
Router
::
new
(
c
,
&
connections
)))
.collect
();
let
routers
:
BTreeMap
<
u8
,
Router
>
=
routers_data
.iter
()
.map
(|
c
|
(
c
.id
,
Router
::
new
(
c
,
&
routers_data
,
&
connections
)))
.collect
();
let
routers
=
Arc
::
new
(
RwLock
::
new
(
routers
));
let
routers
=
Arc
::
new
(
RwLock
::
new
(
routers
));
// let gateway_groups_data: Vec<GatewayGroup> = serde_json::from_str(&std::fs::read_to_string(
// let gateway_groups_data: Vec<GatewayGroup> = serde_json::from_str(&std::fs::read_to_string(
// "../import/data/GatewayGroup.json",
// "../import/data/GatewayGroup.json",
...
...
src/router.rs
View file @
5ab08d3c
use
crate
::
UpdatingState
;
use
crate
::
data
::{
ConnectionData
,
RouterData
};
use
crate
::
data
::{
ConnectionData
,
RouterData
};
use
crate
::
protocol
::{
Change
,
PeerQuality
,
Report
};
use
crate
::
protocol
::{
Change
,
PeerQuality
,
Report
};
use
crate
::
quality
::
Quality
;
use
crate
::
quality
::
Quality
;
use
crate
::
settings
::
THROTTLE
;
use
crate
::
settings
::
THROTTLE
;
use
crate
::
UpdatingState
;
use
serde
::
Serialize
;
use
serde
::
Serialize
;
use
std
::
collections
::
BTreeMap
;
use
std
::
collections
::
BTreeMap
;
use
std
::
net
::
SocketAddr
;
use
std
::
net
::
SocketAddr
;
...
@@ -34,7 +34,7 @@ impl PartialEq<Self> for Router {
...
@@ -34,7 +34,7 @@ impl PartialEq<Self> for Router {
impl
Eq
for
Router
{}
impl
Eq
for
Router
{}
impl
Router
{
impl
Router
{
pub
fn
new
(
data
:
&
RouterData
,
connections
:
&
BTreeMap
<
u8
,
BTreeMap
<
u8
,
ConnectionData
>>
)
->
Self
{
pub
fn
new
(
data
:
&
RouterData
,
routers
:
&
Vec
<
RouterData
>
,
connections
:
&
BTreeMap
<
u8
,
BTreeMap
<
u8
,
ConnectionData
>>
)
->
Self
{
Self
{
Self
{
id
:
data
.id
,
id
:
data
.id
,
seq
:
0
,
seq
:
0
,
...
@@ -52,7 +52,7 @@ impl Router {
...
@@ -52,7 +52,7 @@ impl Router {
)
)
})
})
.collect
(),
.collect
(),
via
:
BTreeMap
::
new
(),
via
:
routers
.iter
()
.filter
(|
r
|
r
.id
!=
data
.id
)
.map
(|
r
|
(
r
.id
,
r
.id
))
.collect
(),
plan
:
BTreeMap
::
new
(),
plan
:
BTreeMap
::
new
(),
time
:
Instant
::
now
(),
time
:
Instant
::
now
(),
addr
:
None
,
addr
:
None
,
...
@@ -161,6 +161,7 @@ impl Router {
...
@@ -161,6 +161,7 @@ impl Router {
let
mut
current
=
self
;
let
mut
current
=
self
;
let
mut
next
=
via
;
let
mut
next
=
via
;
loop
{
loop
{
// 不通的情况 via 会标记为直连,实际不可达
match
next
.peers
.get
(
&
current
.id
)
{
match
next
.peers
.get
(
&
current
.id
)
{
None
=>
return
Quality
::
UNREACHABLE
,
None
=>
return
Quality
::
UNREACHABLE
,
Some
(
quality
)
=>
{
Some
(
quality
)
=>
{
...
@@ -179,8 +180,7 @@ impl Router {
...
@@ -179,8 +180,7 @@ impl Router {
current
=
next
;
current
=
next
;
next
=
&
routers
[
&
current
.via
[
&
to
.id
]];
next
=
&
routers
[
&
current
.via
[
&
to
.id
]];
// via 如果不可达会指向自己
// 检查环路
// 并且也检查环路
if
route
.contains
(
&
next
)
{
if
route
.contains
(
&
next
)
{
return
Quality
::
UNREACHABLE
;
return
Quality
::
UNREACHABLE
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment