mirror of
https://github.com/yggdrasil-network/yggdrasil-go.git
synced 2024-11-27 12:05:23 +00:00
Merge pull request #350 from neilalexander/awdl
Wake AWDL for multicast peering on macOS
This commit is contained in:
commit
3c733eadb4
@ -3,7 +3,7 @@
|
|||||||
# Check https://circleci.com/docs/2.0/language-go/ for more details
|
# Check https://circleci.com/docs/2.0/language-go/ for more details
|
||||||
version: 2
|
version: 2
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build-linux:
|
||||||
docker:
|
docker:
|
||||||
- image: circleci/golang:1.11
|
- image: circleci/golang:1.11
|
||||||
|
|
||||||
@ -43,17 +43,97 @@ jobs:
|
|||||||
sudo alien --to-rpm yggdrasil*.deb --scripts --keep-version && mv *.rpm /tmp/upload/;
|
sudo alien --to-rpm yggdrasil*.deb --scripts --keep-version && mv *.rpm /tmp/upload/;
|
||||||
mv *.deb /tmp/upload/
|
mv *.deb /tmp/upload/
|
||||||
|
|
||||||
|
- run:
|
||||||
|
name: Build for EdgeRouter
|
||||||
|
command: |
|
||||||
|
rm -f {yggdrasil,yggdrasilctl}
|
||||||
|
git clone https://github.com/neilalexander/vyatta-yggdrasil /tmp/vyatta-yggdrasil;
|
||||||
|
cd /tmp/vyatta-yggdrasil;
|
||||||
|
BUILDDIR_YGG=$CIRCLE_WORKING_DIRECTORY ./build-edgerouter-x $CIRCLE_BRANCH;
|
||||||
|
BUILDDIR_YGG=$CIRCLE_WORKING_DIRECTORY ./build-edgerouter-lite $CIRCLE_BRANCH;
|
||||||
|
mv *.deb /tmp/upload;
|
||||||
|
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: /tmp
|
||||||
|
paths:
|
||||||
|
- upload
|
||||||
|
|
||||||
|
build-macos:
|
||||||
|
macos:
|
||||||
|
xcode: "10.0.0"
|
||||||
|
|
||||||
|
working_directory: ~/go/src/github.com/yggdrasil-network/yggdrasil-go
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
|
||||||
|
- run:
|
||||||
|
name: Create artifact upload directory and set variables
|
||||||
|
command: |
|
||||||
|
mkdir /tmp/upload
|
||||||
|
echo 'export CINAME=$(sh contrib/semver/name.sh)' >> $BASH_ENV
|
||||||
|
echo 'export CIVERSION=$(sh contrib/semver/version.sh --bare)' >> $BASH_ENV
|
||||||
|
echo 'export PATH=$PATH:/usr/local/go/bin:~/go/bin' >> $BASH_ENV
|
||||||
|
git config --global user.email "$(git log --format='%ae' HEAD -1)";
|
||||||
|
git config --global user.name "$(git log --format='%an' HEAD -1)";
|
||||||
|
echo -e "Host *\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
|
||||||
|
|
||||||
|
- run:
|
||||||
|
name: Install Go 1.11
|
||||||
|
command: |
|
||||||
|
cd /tmp
|
||||||
|
curl -LO https://dl.google.com/go/go1.11.5.darwin-amd64.pkg
|
||||||
|
sudo installer -pkg /tmp/go1.11.5.darwin-amd64.pkg -target /
|
||||||
|
|
||||||
|
- run:
|
||||||
|
name: Install Gomobile
|
||||||
|
command: |
|
||||||
|
GO111MODULE=off go get golang.org/x/mobile/cmd/gomobile
|
||||||
|
gomobile init
|
||||||
|
|
||||||
- run:
|
- run:
|
||||||
name: Build for macOS
|
name: Build for macOS
|
||||||
command: |
|
command: |
|
||||||
rm -f {yggdrasil,yggdrasilctl}
|
rm -f {yggdrasil,yggdrasilctl}
|
||||||
GOOS=darwin GOARCH=amd64 ./build && mv yggdrasil /tmp/upload/$CINAME-$CIVERSION-darwin-amd64 && mv yggdrasilctl /tmp/upload/$CINAME-$CIVERSION-yggdrasilctl-darwin-amd64;
|
GO111MODULE=on GOOS=darwin GOARCH=amd64 ./build
|
||||||
|
mv yggdrasil /tmp/upload/$CINAME-$CIVERSION-darwin-amd64
|
||||||
|
mv yggdrasilctl /tmp/upload/$CINAME-$CIVERSION-yggdrasilctl-darwin-amd64;
|
||||||
|
|
||||||
- run:
|
- run:
|
||||||
name: Build for macOS (.pkg format)
|
name: Build for macOS (.pkg format)
|
||||||
command: |
|
command: |
|
||||||
rm -rf {yggdrasil,yggdrasilctl}
|
rm -rf {yggdrasil,yggdrasilctl}
|
||||||
GOOS=darwin GOARCH=amd64 ./build && PKGARCH=amd64 sh contrib/macos/create-pkg.sh && mv *.pkg /tmp/upload/
|
PKGARCH=amd64 sh contrib/macos/create-pkg.sh
|
||||||
|
mv *.pkg /tmp/upload/
|
||||||
|
|
||||||
|
#- run:
|
||||||
|
# name: Build framework for iOS (.framework format)
|
||||||
|
# command: |
|
||||||
|
# sudo GO111MODULE=off go get -v github.com/yggdrasil-network/yggdrasil-go/cmd/...
|
||||||
|
# sudo GO111MODULE=off go get -v github.com/yggdrasil-network/yggdrasil-go/src/...
|
||||||
|
# GO111MODULE=off ./build -i
|
||||||
|
# mv *.framework /tmp/upload
|
||||||
|
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: /tmp
|
||||||
|
paths:
|
||||||
|
- upload
|
||||||
|
|
||||||
|
build-other:
|
||||||
|
docker:
|
||||||
|
- image: circleci/golang:1.11
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
|
||||||
|
- run:
|
||||||
|
name: Create artifact upload directory and set variables
|
||||||
|
command: |
|
||||||
|
mkdir /tmp/upload
|
||||||
|
echo 'export CINAME=$(sh contrib/semver/name.sh)' >> $BASH_ENV
|
||||||
|
echo 'export CIVERSION=$(sh contrib/semver/version.sh --bare)' >> $BASH_ENV
|
||||||
|
git config --global user.email "$(git log --format='%ae' HEAD -1)";
|
||||||
|
git config --global user.name "$(git log --format='%an' HEAD -1)";
|
||||||
|
|
||||||
- run:
|
- run:
|
||||||
name: Build for OpenBSD
|
name: Build for OpenBSD
|
||||||
@ -83,16 +163,31 @@ jobs:
|
|||||||
GOOS=windows GOARCH=amd64 ./build && mv yggdrasil.exe /tmp/upload/$CINAME-$CIVERSION-windows-amd64.exe && mv yggdrasilctl.exe /tmp/upload/$CINAME-$CIVERSION-yggdrasilctl-windows-amd64.exe;
|
GOOS=windows GOARCH=amd64 ./build && mv yggdrasil.exe /tmp/upload/$CINAME-$CIVERSION-windows-amd64.exe && mv yggdrasilctl.exe /tmp/upload/$CINAME-$CIVERSION-yggdrasilctl-windows-amd64.exe;
|
||||||
GOOS=windows GOARCH=386 ./build && mv yggdrasil.exe /tmp/upload/$CINAME-$CIVERSION-windows-i386.exe && mv yggdrasilctl.exe /tmp/upload/$CINAME-$CIVERSION-yggdrasilctl-windows-i386.exe;
|
GOOS=windows GOARCH=386 ./build && mv yggdrasil.exe /tmp/upload/$CINAME-$CIVERSION-windows-i386.exe && mv yggdrasilctl.exe /tmp/upload/$CINAME-$CIVERSION-yggdrasilctl-windows-i386.exe;
|
||||||
|
|
||||||
- run:
|
- persist_to_workspace:
|
||||||
name: Build for EdgeRouter
|
root: /tmp
|
||||||
command: |
|
paths:
|
||||||
rm -f {yggdrasil,yggdrasilctl}
|
- upload
|
||||||
git clone https://github.com/neilalexander/vyatta-yggdrasil /tmp/vyatta-yggdrasil;
|
|
||||||
cd /tmp/vyatta-yggdrasil;
|
upload:
|
||||||
BUILDDIR_YGG=$CIRCLE_WORKING_DIRECTORY ./build-edgerouter-x $CIRCLE_BRANCH;
|
machine: true
|
||||||
BUILDDIR_YGG=$CIRCLE_WORKING_DIRECTORY ./build-edgerouter-lite $CIRCLE_BRANCH;
|
|
||||||
mv *.deb /tmp/upload;
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: /tmp
|
||||||
|
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
path: /tmp/upload
|
path: /tmp/upload
|
||||||
destination: /
|
destination: /
|
||||||
|
|
||||||
|
workflows:
|
||||||
|
version: 2
|
||||||
|
build-all:
|
||||||
|
jobs:
|
||||||
|
- build-linux
|
||||||
|
- build-macos
|
||||||
|
- build-other
|
||||||
|
- upload:
|
||||||
|
requires:
|
||||||
|
- build-linux
|
||||||
|
- build-macos
|
||||||
|
- build-other
|
||||||
|
@ -50,7 +50,7 @@ func (m *multicast) start() error {
|
|||||||
}
|
}
|
||||||
listenString := fmt.Sprintf("[::]:%v", addr.Port)
|
listenString := fmt.Sprintf("[::]:%v", addr.Port)
|
||||||
lc := net.ListenConfig{
|
lc := net.ListenConfig{
|
||||||
Control: multicastReuse,
|
Control: m.multicastReuse,
|
||||||
}
|
}
|
||||||
conn, err := lc.ListenPacket(context.Background(), "udp6", listenString)
|
conn, err := lc.ListenPacket(context.Background(), "udp6", listenString)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -61,6 +61,7 @@ func (m *multicast) start() error {
|
|||||||
// Windows can't set this flag, so we need to handle it in other ways
|
// Windows can't set this flag, so we need to handle it in other ways
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m.multicastWake()
|
||||||
go m.listen()
|
go m.listen()
|
||||||
go m.announce()
|
go m.announce()
|
||||||
}
|
}
|
||||||
|
@ -2,10 +2,32 @@
|
|||||||
|
|
||||||
package yggdrasil
|
package yggdrasil
|
||||||
|
|
||||||
|
/*
|
||||||
|
#cgo CFLAGS: -x objective-c
|
||||||
|
#cgo LDFLAGS: -framework Foundation
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
void WakeUpAWDL() {
|
||||||
|
NSNetServiceBrowser *serviceBrowser;
|
||||||
|
|
||||||
|
serviceBrowser = [[NSNetServiceBrowser alloc] init];
|
||||||
|
serviceBrowser.includesPeerToPeer = YES;
|
||||||
|
[serviceBrowser searchForServicesOfType:@"_yggdrasil._tcp" inDomain:@""];
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
import "C"
|
||||||
import "syscall"
|
import "syscall"
|
||||||
import "golang.org/x/sys/unix"
|
import "golang.org/x/sys/unix"
|
||||||
|
|
||||||
func multicastReuse(network string, address string, c syscall.RawConn) error {
|
func (m *multicast) multicastWake() {
|
||||||
|
for _, intf := range m.interfaces() {
|
||||||
|
if intf.Name == "awdl0" {
|
||||||
|
m.core.log.Infoln("Multicast discovery is waking up AWDL")
|
||||||
|
C.WakeUpAWDL()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *multicast) multicastReuse(network string, address string, c syscall.RawConn) error {
|
||||||
var control error
|
var control error
|
||||||
var reuseport error
|
var reuseport error
|
||||||
var recvanyif error
|
var recvanyif error
|
||||||
|
@ -4,6 +4,10 @@ package yggdrasil
|
|||||||
|
|
||||||
import "syscall"
|
import "syscall"
|
||||||
|
|
||||||
func multicastReuse(network string, address string, c syscall.RawConn) error {
|
func (m *multicast) multicastWake() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *multicast) multicastReuse(network string, address string, c syscall.RawConn) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,11 @@ package yggdrasil
|
|||||||
import "syscall"
|
import "syscall"
|
||||||
import "golang.org/x/sys/unix"
|
import "golang.org/x/sys/unix"
|
||||||
|
|
||||||
func multicastReuse(network string, address string, c syscall.RawConn) error {
|
func (m *multicast) multicastWake() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *multicast) multicastReuse(network string, address string, c syscall.RawConn) error {
|
||||||
var control error
|
var control error
|
||||||
var reuseport error
|
var reuseport error
|
||||||
|
|
||||||
|
@ -5,7 +5,11 @@ package yggdrasil
|
|||||||
import "syscall"
|
import "syscall"
|
||||||
import "golang.org/x/sys/windows"
|
import "golang.org/x/sys/windows"
|
||||||
|
|
||||||
func multicastReuse(network string, address string, c syscall.RawConn) error {
|
func (m *multicast) multicastWake() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *multicast) multicastReuse(network string, address string, c syscall.RawConn) error {
|
||||||
var control error
|
var control error
|
||||||
var reuseaddr error
|
var reuseaddr error
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user