Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
R
railgun-routing-client
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-client
Commits
0fbd3a9d
Commit
0fbd3a9d
authored
Jan 06, 2026
by
nanamicat
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix
parent
f954add0
Pipeline
#42419
passed with stages
in 1 minute and 10 seconds
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
28 additions
and
40 deletions
+28
-40
src/main.rs
src/main.rs
+7
-15
src/server.rs
src/server.rs
+21
-25
No files found.
src/main.rs
View file @
0fbd3a9d
...
@@ -23,23 +23,15 @@ use hickory_resolver::Resolver;
...
@@ -23,23 +23,15 @@ use hickory_resolver::Resolver;
#[tokio::main]
#[tokio::main]
async
fn
main
()
->
anyhow
::
Result
<
()
>
{
async
fn
main
()
->
anyhow
::
Result
<
()
>
{
tracing_subscriber
::
fmt
::
init
();
tracing_subscriber
::
fmt
::
init
();
let
config
:
Settings
=
Config
::
builder
()
let
config
:
Settings
=
Config
::
builder
()
.add_source
(
config
::
Environment
::
default
())
.build
()
?
.try_deserialize
()
?
;
.add_source
(
config
::
Environment
::
default
())
let
routers_data
=
serde_json
::
from_slice
::
<
Vec
<
RouterData
>>
(
&
fs
::
read
(
"import/data/Router.json"
)
?
)
?
;
.build
()
?
let
mut
routers
:
BTreeMap
<
u8
,
Router
>
=
routers_data
.iter
()
.map
(|
r
|
(
r
.id
,
Router
::
new
(
r
,
&
config
)))
.collect
();
.try_deserialize
()
?
;
let
connections
=
serde_json
::
from_slice
::
<
BTreeMap
<
u8
,
BTreeMap
<
u8
,
Connection
>>>
(
&
fs
::
read
(
"import/connections.json"
)
?
)
?
;
let
routers_data
=
serde_json
::
from_slice
::
<
Vec
<
RouterData
>>
(
&
fs
::
read
(
"import/data/Router.json"
)
?
)
?
;
let
mut
routers
:
BTreeMap
<
u8
,
Router
>
=
routers_data
.iter
()
.map
(|
r
|
(
r
.id
,
Router
::
new
(
r
,
&
config
)))
.collect
();
let
connections
=
serde_json
::
from_slice
::
<
BTreeMap
<
u8
,
BTreeMap
<
u8
,
Connection
>>>
(
&
fs
::
read
(
"import/connections.json"
,
)
?
)
?
;
// let groups: Vec<GatewayGroup> = serde_json::from_slice(&fs::read("import/GatewayGroup.json")?)?;
// let groups: Vec<GatewayGroup> = serde_json::from_slice(&fs::read("import/GatewayGroup.json")?)?;
let
mut
server
=
Server
::
new
(
let
mut
server
=
Server
::
new
(
// &routers,
config
.id
,
&
routers
,
// groups
// groups
// .iter()
// .iter()
// .map(|g| (g.id, g.routers(&groups, &routers_data)))
// .map(|g| (g.id, g.routers(&groups, &routers_data)))
...
@@ -69,7 +61,7 @@ async fn main() -> anyhow::Result<()> {
...
@@ -69,7 +61,7 @@ async fn main() -> anyhow::Result<()> {
peer
.on_message
(
&
hello
);
peer
.on_message
(
&
hello
);
}
else
if
addr
.port
()
==
config
.server.port
}
else
if
addr
.port
()
==
config
.server.port
&&
let
Ok
((
downlink
,
_
))
=
bincode
::
decode_from_slice
(
&
buf
[
..
len
],
bincode
::
config
::
standard
())
&&
let
Ok
((
downlink
,
_
))
=
bincode
::
decode_from_slice
(
&
buf
[
..
len
],
bincode
::
config
::
standard
())
&&
let
Some
(
uplink
)
=
server
.on_message
(
&
downlink
,
&
routers_data
,
&
connections
[
&
config
.id
],
&
config
)
.await
&&
let
Some
(
uplink
)
=
server
.on_message
(
downlink
,
&
routers_data
,
&
connections
[
&
config
.id
],
&
config
)
.await
{
{
let
len
=
bincode
::
encode_into_slice
(
uplink
,
&
mut
buf
,
bincode
::
config
::
standard
())
?
;
let
len
=
bincode
::
encode_into_slice
(
uplink
,
&
mut
buf
,
bincode
::
config
::
standard
())
?
;
let
_
=
socket
.send_to
(
&
buf
[
..
len
],
addr
)
.await
;
let
_
=
socket
.send_to
(
&
buf
[
..
len
],
addr
)
.await
;
...
...
src/server.rs
View file @
0fbd3a9d
use
crate
::
protocol
::{
Downlink
,
MessageType
,
Uplink
};
use
crate
::
protocol
::{
Downlink
,
MessageType
,
Uplink
};
use
crate
::
router
::
Router
;
use
crate
::
settings
::
Settings
;
use
crate
::
settings
::
Settings
;
use
crate
::{
connection
::
Connection
,
data
};
use
crate
::{
connection
::
Connection
,
data
};
use
netlink_sys
::{
Socket
,
TokioSocket
,
protocols
::
NETLINK_ROUTE
};
use
netlink_sys
::{
protocols
::
NETLINK_ROUTE
,
Socket
,
TokioSocket
};
use
std
::
collections
::
BTreeMap
;
use
std
::
collections
::
BTreeMap
;
use
std
::
os
::
unix
::
io
::{
AsRawFd
,
FromRawFd
};
use
std
::
os
::
unix
::
io
::{
AsRawFd
,
FromRawFd
};
...
@@ -14,7 +15,7 @@ pub struct Server {
...
@@ -14,7 +15,7 @@ pub struct Server {
}
}
impl
Server
{
impl
Server
{
pub
fn
new
()
->
Self
{
pub
fn
new
(
id
:
u8
,
routers
:
&
BTreeMap
<
u8
,
Router
>
)
->
Self
{
let
socket
=
std
::
mem
::
ManuallyDrop
::
new
(
Socket
::
new
(
NETLINK_ROUTE
)
.unwrap
());
let
socket
=
std
::
mem
::
ManuallyDrop
::
new
(
Socket
::
new
(
NETLINK_ROUTE
)
.unwrap
());
socket
.set_netlink_get_strict_chk
(
true
)
.unwrap
();
socket
.set_netlink_get_strict_chk
(
true
)
.unwrap
();
let
socket
=
unsafe
{
TokioSocket
::
from_raw_fd
(
socket
.as_raw_fd
())
};
let
socket
=
unsafe
{
TokioSocket
::
from_raw_fd
(
socket
.as_raw_fd
())
};
...
@@ -23,7 +24,7 @@ impl Server {
...
@@ -23,7 +24,7 @@ impl Server {
Server
{
Server
{
online
:
false
,
online
:
false
,
version
:
rand
::
random
(),
version
:
rand
::
random
(),
via
:
Default
::
defaul
t
(),
via
:
routers
.keys
()
.filter
(|
&&
i
|
i
!=
id
)
.map
(|
&
i
|
(
i
,
i
))
.collec
t
(),
plan
:
Default
::
default
(),
plan
:
Default
::
default
(),
handle
,
handle
,
}
}
...
@@ -31,17 +32,13 @@ impl Server {
...
@@ -31,17 +32,13 @@ impl Server {
pub
async
fn
on_message
(
pub
async
fn
on_message
(
&
mut
self
,
&
mut
self
,
m
essage
:
&
Downlink
,
m
ut
message
:
Downlink
,
routers
:
&
Vec
<
data
::
Router
>
,
routers
:
&
Vec
<
data
::
Router
>
,
connections
:
&
BTreeMap
<
u8
,
Connection
>
,
connections
:
&
BTreeMap
<
u8
,
Connection
>
,
config
:
&
Settings
,
// routers: &mut HashMap<u8, Router>,
config
:
&
Settings
,
// routers: &mut HashMap<u8, Router>,
// self_peer: &Hello,
// self_peer: &Hello,
)
->
Option
<
Uplink
>
{
)
->
Option
<
Uplink
>
{
tracing
::
info!
(
tracing
::
info!
(
"server message {:?}, version = {}"
,
message
,
message
.version
);
"server message {:?}, version = {}"
,
message
,
message
.version
);
if
message
.ack
!=
self
.version
{
if
message
.ack
!=
self
.version
{
return
None
;
return
None
;
}
}
...
@@ -51,7 +48,8 @@ impl Server {
...
@@ -51,7 +48,8 @@ impl Server {
(
false
,
MessageType
::
Full
)
=>
{
(
false
,
MessageType
::
Full
)
=>
{
self
.reset
(
routers
,
connections
,
config
)
.await
;
self
.reset
(
routers
,
connections
,
config
)
.await
;
self
.online
=
true
;
self
.online
=
true
;
// TODO: apply via and plan
self
.via
.append
(
&
mut
message
.via
);
self
.plan
.append
(
&
mut
message
.plan
);
Some
(
Uplink
{
Some
(
Uplink
{
id
:
config
.id
,
id
:
config
.id
,
action
:
MessageType
::
Update
,
action
:
MessageType
::
Update
,
...
@@ -69,25 +67,23 @@ impl Server {
...
@@ -69,25 +67,23 @@ impl Server {
via
:
self
.via
.clone
(),
via
:
self
.via
.clone
(),
plan
:
self
.plan
.clone
(),
plan
:
self
.plan
.clone
(),
}),
}),
(
true
,
MessageType
::
Update
)
=>
Some
(
Uplink
{
(
true
,
MessageType
::
Update
)
=>
{
id
:
config
.id
,
self
.via
.append
(
&
mut
message
.via
);
action
:
MessageType
::
Update
,
self
.plan
.append
(
&
mut
message
.plan
);
version
:
self
.version
,
Some
(
Uplink
{
peers
:
Default
::
default
(),
id
:
config
.id
,
via
:
Default
::
default
(),
action
:
MessageType
::
Update
,
plan
:
Default
::
default
(),
version
:
self
.version
,
// TODO: apply via and plan
peers
:
Default
::
default
(),
}),
via
:
Default
::
default
(),
plan
:
Default
::
default
(),
})
}
_
=>
None
,
_
=>
None
,
}
}
}
}
pub
async
fn
reset
(
pub
async
fn
reset
(
&
self
,
routers
:
&
Vec
<
data
::
Router
>
,
connections
:
&
BTreeMap
<
u8
,
Connection
>
,
config
:
&
Settings
)
{
&
self
,
routers
:
&
Vec
<
data
::
Router
>
,
connections
:
&
BTreeMap
<
u8
,
Connection
>
,
config
:
&
Settings
,
)
{
println!
(
"reset"
);
println!
(
"reset"
);
// let mut routes = self.handle.route().get(RouteMessageBuilder::<Ipv4Addr>::new().protocol(ROUTE_PROTOCOL).build()).execute();
// let mut routes = self.handle.route().get(RouteMessageBuilder::<Ipv4Addr>::new().protocol(ROUTE_PROTOCOL).build()).execute();
// while let Some(route) = routes.try_next().await.unwrap() {
// while let Some(route) = routes.try_next().await.unwrap() {
...
...
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