Skip to content

Commit 2fd43cd

Browse files
committed
Merge branch 'fix-linux'
2 parents 214cee1 + 3278841 commit 2fd43cd

6 files changed

+43
-33
lines changed

Makefile

+7
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,16 @@ VERSION=$(shell git describe --exact-match --tags 2>/dev/null)
88
BUILD_DIR=build
99
PACKAGE_RPI=candump-$(VERSION)_linux_armhf
1010

11+
# unset GOPATH to us Go modules
12+
unexport GOPATH
13+
1114
test:
1215
$(GOTEST) -v ./...
1316

17+
clean:
18+
$(GOCLEAN)
19+
rm -rf $(BUILD_DIR)
20+
1421
package-rpi: build-rpi
1522
tar -cvzf $(PACKAGE_RPI).tar.gz -C $(BUILD_DIR) $(PACKAGE_RPI)
1623

go.mod

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module github.com/brutella/can
2+
3+
require golang.org/x/sys v0.0.0-20181213200352-4d1cda033e06

go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
golang.org/x/sys v0.0.0-20181213200352-4d1cda033e06 h1:0oC8rFnE+74kEmuHZ46F6KHsMr5Gx2gUQPuNz28iQZM=
2+
golang.org/x/sys v0.0.0-20181213200352-4d1cda033e06/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=

readwritecloser.go

-33
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
package can
22

33
import (
4-
"fmt"
54
"io"
6-
"net"
7-
"os"
8-
"syscall"
95
)
106

117
// The Reader interface extends the `io.Reader` interface by method
@@ -31,39 +27,10 @@ type ReadWriteCloser interface {
3127
io.Closer
3228
}
3329

34-
// Socket protocols
35-
const (
36-
Raw uint8 = 1 // CAN_RAW
37-
Bcm uint8 = 2 // CAN_BCM
38-
TP16 uint8 = 3
39-
TP20 uint8 = 4
40-
MCNet uint8 = 5
41-
ISOTp uint8 = 6
42-
)
43-
4430
type readWriteCloser struct {
4531
rwc io.ReadWriteCloser
4632
}
4733

48-
// NewReadWriteCloserForInterface returns a ReadWriteCloser for a network interface.
49-
func NewReadWriteCloserForInterface(i *net.Interface) (ReadWriteCloser, error) {
50-
proto := Raw
51-
s, err := syscall.Socket(AF_CAN, syscall.SOCK_RAW, int(proto) /* 0? */)
52-
if err != nil {
53-
return nil, err
54-
}
55-
56-
addr := NewSockaddr(uint16(proto) /* can.AF_CAN? */, i.Index /* 0 for all interfaces? */)
57-
58-
if err := syscall.Bind(s, addr); err != nil {
59-
return nil, err
60-
}
61-
62-
f := os.NewFile(uintptr(s), fmt.Sprintf("fd %d", s))
63-
64-
return &readWriteCloser{f}, nil
65-
}
66-
6734
// NewReadWriteCloser returns a ReadWriteCloser for an `io.ReadWriteCloser`.
6835
func NewReadWriteCloser(rwc io.ReadWriteCloser) ReadWriteCloser {
6936
return &readWriteCloser{rwc}

readwritecloser_darwin.go

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package can
2+
3+
import (
4+
"fmt"
5+
"net"
6+
)
7+
8+
func NewReadWriteCloserForInterface(i *net.Interface) (ReadWriteCloser, error) {
9+
return nil, fmt.Errorf("Binding to can interface no supported on Darwin")
10+
}

readwritecloser_linux.go

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package can
2+
3+
import (
4+
"fmt"
5+
"golang.org/x/sys/unix"
6+
"net"
7+
"os"
8+
"syscall"
9+
)
10+
11+
func NewReadWriteCloserForInterface(i *net.Interface) (ReadWriteCloser, error) {
12+
s, _ := syscall.Socket(syscall.AF_CAN, syscall.SOCK_RAW, unix.CAN_RAW)
13+
addr := &unix.SockaddrCAN{Ifindex: i.Index}
14+
if err := unix.Bind(s, addr); err != nil {
15+
return nil, err
16+
}
17+
18+
f := os.NewFile(uintptr(s), fmt.Sprintf("fd %d", s))
19+
20+
return &readWriteCloser{f}, nil
21+
}

0 commit comments

Comments
 (0)