mirror of
https://github.com/RoganDawes/P4wnP1_aloa.git
synced 2025-03-27 01:51:45 +01:00
Enable multicast on interfaces, to allow mDNS (avahi-daemon)
This commit is contained in:
parent
fb4eb763d6
commit
d6d8ce789f
@ -587,6 +587,38 @@ func NetworkSetMacAddress(iface *net.Interface, macaddr string) error {
|
||||
return s.HandleAck(wb.Seq)
|
||||
}
|
||||
|
||||
//Added by MaMe82
|
||||
// Bring down a particular network interface.
|
||||
// This is identical to running: ip link set $name down
|
||||
func NetworkSetMulticast(iface *net.Interface, enable bool) error {
|
||||
s, err := getNetlinkSocket()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer s.Close()
|
||||
|
||||
wb := newNetlinkRequest(syscall.RTM_SETLINK, syscall.NLM_F_ACK)
|
||||
|
||||
msg := newIfInfomsg(syscall.AF_UNSPEC)
|
||||
msg.Index = int32(iface.Index)
|
||||
msg.Flags = syscall.NLM_F_REQUEST
|
||||
msg.Change = DEFAULT_CHANGE
|
||||
msg.IfInfomsg.Change |= syscall.IFF_MULTICAST
|
||||
if enable {
|
||||
msg.IfInfomsg.Flags |= syscall.IFF_MULTICAST
|
||||
} else {
|
||||
msg.IfInfomsg.Flags = uint32(int(msg.IfInfomsg.Flags) & ^syscall.IFF_MULTICAST)
|
||||
}
|
||||
|
||||
wb.AddData(msg)
|
||||
|
||||
if err := s.Send(wb); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return s.HandleAck(wb.Seq)
|
||||
}
|
||||
|
||||
// Set link Maximum Transmission Unit
|
||||
// This is identical to running: ip link set dev $name mtu $MTU
|
||||
// bridge is a bitch here https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=292088
|
||||
@ -616,6 +648,7 @@ func NetworkSetMTU(iface *net.Interface, mtu int) error {
|
||||
return s.HandleAck(wb.Seq)
|
||||
}
|
||||
|
||||
|
||||
// Set link queue length
|
||||
// This is identical to running: ip link set dev $name txqueuelen $QLEN
|
||||
func NetworkSetTxQueueLen(iface *net.Interface, txQueueLen int) error {
|
||||
|
@ -136,11 +136,17 @@ func ConfigureInterface(settings *pb.EthernetInterfaceSettings) (err error) {
|
||||
if settings.Enabled {
|
||||
log.Printf("Setting Interface %s to UP\n", iface.Name)
|
||||
err = netlink.NetworkLinkUp(iface)
|
||||
if err != nil { return err }
|
||||
log.Printf("Setting Interface %s to MULTICAST to ON\n", iface.Name)
|
||||
err = netlink.NetworkSetMulticast(iface, true)
|
||||
if err != nil { return err }
|
||||
|
||||
} else {
|
||||
log.Printf("Setting Interface %s to DOWN\n", iface.Name)
|
||||
err = netlink.NetworkLinkDown(iface)
|
||||
if err != nil { return err }
|
||||
}
|
||||
if err != nil { return err }
|
||||
|
||||
case pb.EthernetInterfaceSettings_DHCP_SERVER:
|
||||
//Generate net
|
||||
ipNet, err := IpNetFromIPv4AndNetmask(settings.IpAddress4, settings.Netmask4)
|
||||
@ -155,6 +161,11 @@ func ConfigureInterface(settings *pb.EthernetInterfaceSettings) (err error) {
|
||||
if settings.Enabled {
|
||||
log.Printf("Setting Interface %s to UP\n", iface.Name)
|
||||
err = netlink.NetworkLinkUp(iface)
|
||||
if err != nil { return err }
|
||||
log.Printf("Setting Interface %s to MULTICAST to ON\n", iface.Name)
|
||||
err = netlink.NetworkSetMulticast(iface, true)
|
||||
if err != nil { return err }
|
||||
|
||||
|
||||
//check DhcpServerSettings
|
||||
if settings.DhcpServerSettings == nil {
|
||||
@ -194,7 +205,18 @@ func ConfigureInterface(settings *pb.EthernetInterfaceSettings) (err error) {
|
||||
case pb.EthernetInterfaceSettings_DHCP_CLIENT:
|
||||
netlink.NetworkLinkFlush(iface)
|
||||
if settings.Enabled {
|
||||
log.Printf("Setting Interface %s to UP\n", iface.Name)
|
||||
err = netlink.NetworkLinkUp(iface)
|
||||
if err != nil { return err }
|
||||
log.Printf("Setting Interface %s to MULTICAST to ON\n", iface.Name)
|
||||
err = netlink.NetworkSetMulticast(iface, true)
|
||||
if err != nil { return err }
|
||||
|
||||
StartDHCPClient(settings.Name)
|
||||
} else {
|
||||
log.Printf("Setting Interface %s to DOWN\n", iface.Name)
|
||||
err = netlink.NetworkLinkDown(iface)
|
||||
if err != nil { return err }
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user