mirror of
https://github.com/netbirdio/netbird.git
synced 2025-03-13 14:18:47 +01:00
55 lines
1.4 KiB
Go
55 lines
1.4 KiB
Go
|
package server
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
|
||
|
firewall "github.com/netbirdio/netbird/client/firewall/manager"
|
||
|
"github.com/netbirdio/netbird/client/proto"
|
||
|
)
|
||
|
|
||
|
func (s *Server) ForwardingRules(context.Context, *proto.EmptyRequest) (*proto.ForwardingRulesResponse, error) {
|
||
|
s.mutex.Lock()
|
||
|
defer s.mutex.Unlock()
|
||
|
|
||
|
rules := s.statusRecorder.ForwardingRules()
|
||
|
responseRules := make([]*proto.ForwardingRule, 0, len(rules))
|
||
|
for _, rule := range rules {
|
||
|
respRule := &proto.ForwardingRule{
|
||
|
Protocol: string(rule.Protocol),
|
||
|
DestinationPort: portToProto(rule.DestinationPort),
|
||
|
TranslatedAddress: rule.TranslatedAddress.String(),
|
||
|
TranslatedHostname: s.hostNameByTranslateAddress(rule.TranslatedAddress.String()),
|
||
|
TranslatedPort: portToProto(rule.TranslatedPort),
|
||
|
}
|
||
|
responseRules = append(responseRules, respRule)
|
||
|
|
||
|
}
|
||
|
|
||
|
return &proto.ForwardingRulesResponse{Rules: responseRules}, nil
|
||
|
}
|
||
|
|
||
|
func (s *Server) hostNameByTranslateAddress(ip string) string {
|
||
|
hostName, ok := s.statusRecorder.PeerByIP(ip)
|
||
|
if !ok {
|
||
|
return ip
|
||
|
}
|
||
|
|
||
|
return hostName
|
||
|
}
|
||
|
|
||
|
func portToProto(port firewall.Port) *proto.PortInfo {
|
||
|
var portInfo proto.PortInfo
|
||
|
|
||
|
if !port.IsRange {
|
||
|
portInfo.PortSelection = &proto.PortInfo_Port{Port: uint32(port.Values[0])}
|
||
|
} else {
|
||
|
portInfo.PortSelection = &proto.PortInfo_Range_{
|
||
|
Range: &proto.PortInfo_Range{
|
||
|
Start: uint32(port.Values[0]),
|
||
|
End: uint32(port.Values[1]),
|
||
|
},
|
||
|
}
|
||
|
}
|
||
|
return &portInfo
|
||
|
}
|