Skip to content

Commit a81dd99

Browse files
committed
+ BGPQ path argument
+ Raise version number for pot. release
1 parent 41ece44 commit a81dd99

File tree

6 files changed

+69
-17
lines changed

6 files changed

+69
-17
lines changed

bgpqworkers/bgpqworkers.go

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,23 @@ func (b *baseBGPQWorker) runCommand(args []string) (ixtypes.PrefixFilters, error
6464
return filters, nil
6565
}
6666

67-
func NewBGPQ3Worker() *BGPQ3Worker {
67+
func NewBGPQ3Worker(path string) *BGPQ3Worker {
68+
var executable string
69+
if path != "" {
70+
if _, err := os.Stat(path); err == nil {
71+
// check if path is executable on linux or mac
72+
executable = path
73+
} else {
74+
log.Printf("Warning: %s is not a valid executable file, will use default executable", path)
75+
executable = findExecutable(getExecutableName("bgpq3"))
76+
}
77+
} else {
78+
executable = findExecutable(getExecutableName("bgpq3"))
79+
}
80+
6881
return &BGPQ3Worker{
6982
baseBGPQWorker{config: BGPQConfig{
70-
Executable: findExecutable(getExecutableName("bgpq3")),
83+
Executable: executable,
7184
Version: 3,
7285
}},
7386
}
@@ -86,20 +99,33 @@ type BGPQ4Worker struct {
8699
baseBGPQWorker
87100
}
88101

89-
func NewBGPQ4Worker() *BGPQ4Worker {
102+
func NewBGPQ4Worker(path string) *BGPQ4Worker {
103+
var executable string
104+
if path != "" {
105+
if _, err := os.Stat(path); err == nil {
106+
// check if path is executable on linux or mac
107+
executable = path
108+
} else {
109+
log.Printf("Warning: %s is not a valid executable file, will use default executable", path)
110+
executable = findExecutable(getExecutableName("bgpq4"))
111+
}
112+
} else {
113+
executable = findExecutable(getExecutableName("bgpq4"))
114+
}
115+
90116
return &BGPQ4Worker{
91117
baseBGPQWorker{config: BGPQConfig{
92-
Executable: findExecutable(getExecutableName("bgpq4")),
118+
Executable: executable,
93119
Version: 4,
94120
}},
95121
}
96122
}
97123

98-
func NewBGPQWorker(version int) BGPQ {
124+
func NewBGPQWorker(version int, path string) BGPQ {
99125
if version == 4 {
100-
return NewBGPQ4Worker()
126+
return NewBGPQ4Worker(path)
101127
}
102-
return NewBGPQ3Worker()
128+
return NewBGPQ3Worker(path)
103129
}
104130

105131
// GenPrefixList generates the prefix lists in bgqp4 way

bgpqworkers/bgpqworkers_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88

99
func TestRunBGPQ3Worker(t *testing.T) {
1010
testAsMacro := "AS196922"
11-
bgpWorker := NewBGPQ3Worker()
11+
bgpWorker := NewBGPQ3Worker("")
1212

1313
prefixFilters, err := bgpWorker.GenPrefixList("as196922p4", testAsMacro, 4, true)
1414
if err != nil {
@@ -41,7 +41,7 @@ func TestRunBGPQ3Worker(t *testing.T) {
4141

4242
func TestRunBGPQ3WorkerWithSource(t *testing.T) {
4343
testAsMacro := "RIPE::AS16097:AS-HLKOMM"
44-
bgpWorker := NewBGPQ3Worker()
44+
bgpWorker := NewBGPQ3Worker("")
4545

4646
prefixFilters, err := bgpWorker.GenPrefixList("as16097p4", testAsMacro, 4, true)
4747
if err != nil {
@@ -75,7 +75,7 @@ func TestRunBGPQ3WorkerWithSource(t *testing.T) {
7575

7676
func TestRunBGPQ4Worker(t *testing.T) {
7777
testAsMacro := "AS196922"
78-
bgpWorker := NewBGPQ4Worker()
78+
bgpWorker := NewBGPQ4Worker("")
7979

8080
prefixFilters, err := bgpWorker.GenPrefixList("as196922p4", testAsMacro, 4, true)
8181
if err != nil {
@@ -109,7 +109,7 @@ func TestRunBGPQ4Worker(t *testing.T) {
109109

110110
func TestRunBGPQ4WorkerWithSource(t *testing.T) {
111111
testAsMacro := "RIPE::AS16097:AS-HLKOMM"
112-
bgpWorker := NewBGPQ4Worker()
112+
bgpWorker := NewBGPQ4Worker("")
113113

114114
prefixFilters, err := bgpWorker.GenPrefixList("as16097p4", testAsMacro, 4, true)
115115
if err != nil {

docker/Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
FROM alpine:latest
22
RUN apk update && apk upgrade && apk add unzip ca-certificates openssl
33
WORKDIR /ixgen
4-
RUN wget -O /tmp/ixgen.tar.gz https://github.com/ipcjk/ixgen/releases/download/0.7/release.tar.gz && tar xfz /tmp/ixgen.tar.gz --exclude release/bgpq3.mac --exclude release/ixapiserver.exe --exclude release/ixapiserver.mac --exclude release/ixgen.mac --exclude release/ixgen.exe --strip 1 && rm /tmp/ixgen.tar.gz
4+
RUN wget -O /tmp/ixgen.tar.gz https://github.com/ipcjk/ixgen/releases/download/0.8a/release.tar.gz && tar xfz /tmp/ixgen.tar.gz --exclude release/bgpq3.mac --exclude release/ixapiserver.exe --exclude release/ixapiserver.mac --exclude release/ixgen.mac --exclude release/ixgen.exe --strip 1 && rm /tmp/ixgen.tar.gz
55
RUN mv /ixgen/ixgen.linux /ixgen/ixgen && mv /ixgen/ixapiserver.linux /ixgen/ixapiserver
66
# RUN mv /ixgen/release/configuration/peering.ini /ixgen/release/configuration/example.ini
77
# E.g. add your peering.ini from your source
8-
MAINTAINER Joerg Kost <jk@ip-clear.de>
8+
LABEL maintainer="Joerg Kost <jk@ip-clear.de>"
99
#CMD ["/ixgen/release/ixgen.linux"]

docker/Dockerfile.git

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
FROM alpine:latest
2+
RUN apk update && apk upgrade
3+
RUN apk add --virtual .build-deps --no-cache unzip ca-certificates openssl go git libc-dev
4+
WORKDIR /build
5+
RUN git clone https://github.com/ipcjk/ixgen.git .
6+
RUN go install ./...
7+
# RUN apk del .build-deps
8+
FROM alpine:latest
9+
WORKDIR /ixgen
10+
RUN apk update && apk upgrade && apk add ca-certificates
11+
RUN mkdir /ixgen/configuration && mkdir /ixgen/cache
12+
COPY --from=0 /root/go/bin/ixgen /ixgen/ixgen
13+
COPY --from=0 /root/go/bin/ixapiserver /ixgen/ixapiserver
14+
COPY --from=0 /build/configuration/* /ixgen/configuration/
15+
COPY --from=0 /build/Readme.md /ixgen/README
16+
COPY --from=0 /build/bgpq3.linux /ixgen/bgpq3.linux
17+
COPY --from=0 /build/bgpq3.license /ixgen/bgpq3.license
18+
COPY --from=0 /build/bgpq4.linux /ixgen/bgpq4.linux
19+
COPY --from=0 /build/bgpq4.license /ixgen/bgpq4.license
20+
COPY --from=0 /build/templates /ixgen/templates
21+
COPY --from=0 /build/LICENSE /ixgen/LICENSE
22+
RUN /ixgen/ixgen -buildcache
23+
LABEL maintainer="Joerg Kost <jk@ip-clear.de>"
24+

ixgen.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ var peerGenerator *peergen.Peergen
3333
var printOrExit, buildCache, version bool
3434
var prefixFactor float64
3535
var bgpqVersion int
36+
var bgpqPath string
3637

3738
/* Api server / uri */
3839
var cacheDirectory string
@@ -64,6 +65,7 @@ func readArgumentsAndSetup() {
6465
flag.StringVar(&apiServiceURL, "api", "https://www.peeringdb.com/api", "use a differnt server as sources instead local/api-service.")
6566
flag.StringVar(&peeringDBAPIKey, "apikey", "", "Peering DB API-Key")
6667
flag.IntVar(&bgpqVersion, "bgpq", 3, "BGPQ version to use (3 or 4)")
68+
flag.StringVar(&bgpqPath, "bgpqpath", "", "path to bgpq binary, default use auto-detection")
6769

6870
/* profiling support */
6971
flag.StringVar(&cpuprofile, "cpuprofile", "", "write cpu profile to `file`")
@@ -72,7 +74,7 @@ func readArgumentsAndSetup() {
7274
flag.Parse()
7375

7476
if version {
75-
log.Println("ixgen 0.8 (C) 2025 by Jörg Kost, jk@ip-clear.de")
77+
log.Println("ixgen 0.8a (C) 2026 by Jörg Kost, jk@ip-clear.de")
7678
os.Exit(0)
7779
}
7880

@@ -121,7 +123,7 @@ func main() {
121123
exchanges = ixworkers.WorkerMergePeerConfiguration(exchanges, apiServiceURL, peeringDBAPIKey, exchangeOnly, myASN, prefixFactor)
122124
/* Merge BGPq prefixFilters if we are on Mac or Linux */
123125
if runtime.GOOS == "linux" || runtime.GOOS == "darwin" {
124-
exchanges = ixworkers.WorkerMergePrefixFilters(exchanges, exchangeOnly, bgpqVersion)
126+
exchanges = ixworkers.WorkerMergePrefixFilters(exchanges, exchangeOnly, bgpqVersion, bgpqPath)
125127
}
126128

127129
if !printOrExit {

ixworkers/ixworkers.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -299,10 +299,10 @@ func WorkerMergePeerConfiguration(exchanges ixtypes.IXs, apiServiceURL string, a
299299
return exchanges
300300
}
301301

302-
func WorkerMergePrefixFilters(exchanges ixtypes.IXs, exchangeOnly string, bgpqVersion int) ixtypes.IXs {
302+
func WorkerMergePrefixFilters(exchanges ixtypes.IXs, exchangeOnly string, bgpqVersion int, bgpqPath string) ixtypes.IXs {
303303
var wg sync.WaitGroup
304304

305-
bgpWorker := bgpqworkers.NewBGPQWorker(bgpqVersion)
305+
bgpWorker := bgpqworkers.NewBGPQWorker(bgpqVersion, bgpqPath)
306306

307307
wg.Add(len(exchanges))
308308
for k := range exchanges {

0 commit comments

Comments
 (0)