Commit 7e384573 authored by 神楽坂玲奈's avatar 神楽坂玲奈

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/RouteWriter.ts
#	src/Server.ts
parents 83b41c06 786fbf24
FROM node FROM node:16.3.0-alpine3.13
RUN apt-get update RUN apk add --no-cache iproute2
RUN apt-get install -y kmod ipset gettext
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/ WORKDIR /app
RUN npm install
COPY . /usr/src/app
CMD [ "./start.sh" ] COPY package*.json ./
RUN npm ci
COPY . .
CMD [ "./node_modules/.bin/ts-node", "src/main.ts"]
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "railgun-routing-client",
"version": "0.0.1", "version": "0.0.1",
"devDependencies": { "devDependencies": {
"@types/node": "^16.6.1", "@types/node": "^16.6.1",
......
import config from '../config/config.json'; import config from '../config/config.json';
import routers from '../config/routers.json'; import routers from '../config/routers.json';
import child_process from 'child_process';
export class RouteWriter { export class RouteWriter {
static input: string[] = [];
static reset() { static reset() {
console.log(`route flush table ${config.table} proto ${config.proto}`); this.input.push(`route flush table ${config.table} proto ${config.proto}`);
for (const peer of routers.filter(r => r.id !== parseInt(process.env.RAILGUN_ID) && r.interface)) { for (const peer of routers.filter((r) => r.id !== parseInt(process.env.RAILGUN_ID) && r.interface)) {
this.set(peer.id, peer.id); this.set(peer.id, peer.id);
} }
} }
...@@ -15,7 +17,13 @@ export class RouteWriter { ...@@ -15,7 +17,13 @@ export class RouteWriter {
const to = routers.find(r => r.id === toId); const to = routers.find(r => r.id === toId);
const via = routers.find(r => r.id === viaId); const via = routers.find(r => r.id === viaId);
for (const address of [to.address, ...to.subnets]) { for (const address of [to.address, ...to.subnets]) {
console.log(`route replace ${address} dev ${via.interface}`); this.input.push(`route replace ${address} dev ${via.interface} table ${config.table} proto ${config.proto}`);
} }
} }
static commit() {
// 可能改成异步的会更好点
child_process.execFileSync('ip', ['-batch', '-'], { input: this.input.join('\n') });
this.input = [];
}
} }
...@@ -21,7 +21,7 @@ export class Server { ...@@ -21,7 +21,7 @@ export class Server {
for (const [to, via] of Object.entries(message.via)) { for (const [to, via] of Object.entries(message.via)) {
RouteWriter.set(parseInt(to), via); RouteWriter.set(parseInt(to), via);
} }
RouteWriter.commit();
this.ack = message.seq + 1; this.ack = message.seq + 1;
const response: UploadMessage = { const response: UploadMessage = {
...@@ -46,12 +46,10 @@ export class Server { ...@@ -46,12 +46,10 @@ export class Server {
continue; continue;
} }
const reliability = (peer.reliability * (config.timeout - step)) / config.timeout;
const { id, delay } = peer; const { id, delay } = peer;
const reliability = (peer.reliability * (config.timeout - step)) / config.timeout;
// jitter 还没算 // TODO: jitter 没算
p[id] = { delay, jitter: 0, reliability }; p[id] = { delay: Math.round(delay), jitter: 0, reliability };
} }
const message: UploadMessage = { id: self.id, ack: this.ack, peers: p }; const message: UploadMessage = { id: self.id, ack: this.ack, peers: p };
......
ip rule del pref 70
ip route flush table 2
ip rule add ipproto udp sport 495 dport 495 lookup 2 pref 70 ip rule add ipproto udp sport 495 dport 495 lookup 2 pref 70
ip route add unreachable default table 2
ip route add 10.198.0.1 dev mc-yangtze table 2 ip route add 10.198.0.1 dev mc-yangtze table 2
ip route add 10.198.0.3 dev mc-south table 2 ip route add 10.198.0.3 dev mc-south table 2
ip route add 10.198.0.7 dev mc-fractal table 2 ip route add 10.198.0.7 dev mc-fractal table 2
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment