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

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/RouteWriter.ts
#	src/Server.ts
parents 83b41c06 786fbf24
FROM node
RUN apt-get update
RUN apt-get install -y kmod ipset gettext
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
FROM node:16.3.0-alpine3.13
RUN apk add --no-cache iproute2
COPY package.json /usr/src/app/
RUN npm install
COPY . /usr/src/app
WORKDIR /app
CMD [ "./start.sh" ]
COPY package*.json ./
RUN npm ci
COPY . .
CMD [ "./node_modules/.bin/ts-node", "src/main.ts"]
......@@ -5,6 +5,7 @@
"requires": true,
"packages": {
"": {
"name": "railgun-routing-client",
"version": "0.0.1",
"devDependencies": {
"@types/node": "^16.6.1",
......
import config from '../config/config.json';
import routers from '../config/routers.json';
import child_process from 'child_process';
export class RouteWriter {
static input: string[] = [];
static reset() {
console.log(`route flush table ${config.table} proto ${config.proto}`);
for (const peer of routers.filter(r => r.id !== parseInt(process.env.RAILGUN_ID) && r.interface)) {
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)) {
this.set(peer.id, peer.id);
}
}
......@@ -15,7 +17,13 @@ export class RouteWriter {
const to = routers.find(r => r.id === toId);
const via = routers.find(r => r.id === viaId);
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 {
for (const [to, via] of Object.entries(message.via)) {
RouteWriter.set(parseInt(to), via);
}
RouteWriter.commit();
this.ack = message.seq + 1;
const response: UploadMessage = {
......@@ -46,12 +46,10 @@ export class Server {
continue;
}
const reliability = (peer.reliability * (config.timeout - step)) / config.timeout;
const { id, delay } = peer;
// jitter 还没算
p[id] = { delay, jitter: 0, reliability };
const reliability = (peer.reliability * (config.timeout - step)) / config.timeout;
// TODO: jitter 没算
p[id] = { delay: Math.round(delay), jitter: 0, reliability };
}
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 route add unreachable default 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.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