protoproducer

package
v2.1.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 24, 2024 License: BSD-3-Clause Imports: 20 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	BigEndian    EndianType = "big"
	LittleEndian EndianType = "little"

	ProtoString ProtoType = "string"
	ProtoVarint ProtoType = "varint"

	ProtoTypeMap = map[string]ProtoType{
		string(ProtoString): ProtoString,
		string(ProtoVarint): ProtoVarint,
		"bytes":             ProtoString,
	}
)

Functions

func ConvertNetFlowDataSet

func ConvertNetFlowDataSet(flowMessage *ProtoProducerMessage, version uint16, baseTime uint32, uptime uint32, record []netflow.DataField, mapperNetFlow *NetFlowMapper, mapperSFlow *SFlowMapper) error

func ConvertNetFlowLegacyRecord

func ConvertNetFlowLegacyRecord(flowMessage *ProtoProducerMessage, baseTime uint64, uptime uint32, record netflowlegacy.RecordsNetFlowV5)

func CreateProtoProducer

func CreateProtoProducer(cfg *ProducerConfig, samplingRateSystem func() SamplingRateSystem) (producer.ProducerInterface, error)

func DateTimeNanoRenderer added in v2.1.0

func DateTimeNanoRenderer(msg *ProtoProducerMessage, fieldName string, data interface{}) interface{}

func DateTimeRenderer added in v2.1.0

func DateTimeRenderer(msg *ProtoProducerMessage, fieldName string, data interface{}) interface{}

func DecodeNumber

func DecodeNumber(b []byte, out interface{}) error

func DecodeNumberLE

func DecodeNumberLE(b []byte, out interface{}) error

func DecodeUNumber

func DecodeUNumber(b []byte, out interface{}) error

func DecodeUNumberLE

func DecodeUNumberLE(b []byte, out interface{}) error

func EtypeRenderer

func EtypeRenderer(msg *ProtoProducerMessage, fieldName string, data interface{}) interface{}

func ExtractTag

func ExtractTag(name, original string, tag reflect.StructTag) string

func GetBytes

func GetBytes(d []byte, offset int, length int) []byte

func GetSFlowFlowSamples

func GetSFlowFlowSamples(packet *sflow.Packet) []interface{}

func ICMPRenderer

func ICMPRenderer(msg *ProtoProducerMessage, fieldName string, data interface{}) interface{}

func IPRenderer

func IPRenderer(msg *ProtoProducerMessage, fieldName string, data interface{}) interface{}

func IcmpCodeType

func IcmpCodeType(proto, icmpCode, icmpType uint32) string

func Is8021Q added in v2.1.0

func Is8021Q(etherType []byte) bool

func IsARP added in v2.1.0

func IsARP(etherType []byte) bool

func IsIPv4 added in v2.1.0

func IsIPv4(etherType []byte) bool

func IsIPv6 added in v2.1.0

func IsIPv6(etherType []byte) bool

func IsInt

func IsInt(k reflect.Kind) bool

func IsMPLS added in v2.1.0

func IsMPLS(etherType []byte) bool

func IsUInt

func IsUInt(k reflect.Kind) bool

func MacRenderer

func MacRenderer(msg *ProtoProducerMessage, fieldName string, data interface{}) interface{}

func MapCustom

func MapCustom(flowMessage *ProtoProducerMessage, v []byte, cfg MapConfigBase) error

func MapCustomNetFlow

func MapCustomNetFlow(flowMessage *ProtoProducerMessage, df netflow.DataField, mapper *NetFlowMapper) error

func NetFlowLookFor

func NetFlowLookFor(dataFields []netflow.DataField, typeId uint16) (bool, interface{})

func NetFlowPopulate

func NetFlowPopulate(dataFields []netflow.DataField, typeId uint16, addr interface{}) (bool, error)

func NetworkRenderer

func NetworkRenderer(msg *ProtoProducerMessage, fieldName string, data interface{}) interface{}

func NilRenderer

func NilRenderer(msg *ProtoProducerMessage, fieldName string, data interface{}) interface{}

func Parse8021Q added in v2.1.0

func Parse8021Q(offset int, flowMessage *ProtoProducerMessage, data []byte) (etherType []byte, newOffset int, err error)

func ParseEthernet added in v2.1.0

func ParseEthernet(offset int, flowMessage *ProtoProducerMessage, data []byte) (etherType []byte, newOffset int, err error)

func ParseEthernetHeader

func ParseEthernetHeader(flowMessage *ProtoProducerMessage, data []byte, config *SFlowMapper) (err error)

Parses an entire stream consisting of multiple layers of protocols It picks the best field to map when multiple encapsulation of the same layer (eg: tunnels, extension headers, etc.)

func ParseICMP added in v2.1.0

func ParseICMP(offset int, flowMessage *ProtoProducerMessage, data []byte) (newOffset int, err error)

func ParseICMPv6 added in v2.1.0

func ParseICMPv6(offset int, flowMessage *ProtoProducerMessage, data []byte) (newOffset int, err error)

func ParseIPv4 added in v2.1.0

func ParseIPv4(offset int, flowMessage *ProtoProducerMessage, data []byte) (nextHeader byte, newOffset int, err error)

func ParseIPv6 added in v2.1.0

func ParseIPv6(offset int, flowMessage *ProtoProducerMessage, data []byte) (nextHeader byte, newOffset int, err error)

func ParseIPv6Headers added in v2.1.0

func ParseIPv6Headers(nextHeader byte, offset int, flowMessage *ProtoProducerMessage, data []byte) (newNextHeader byte, newOffset int, err error)

func ParseMPLS added in v2.1.0

func ParseMPLS(offset int, flowMessage *ProtoProducerMessage, data []byte) (etherType []byte, newOffset int, err error)

func ParseSampledHeader

func ParseSampledHeader(flowMessage *ProtoProducerMessage, sampledHeader *sflow.SampledHeader) error

func ParseSampledHeaderConfig

func ParseSampledHeaderConfig(flowMessage *ProtoProducerMessage, sampledHeader *sflow.SampledHeader, config *SFlowMapper) error

func ParseTCP added in v2.1.0

func ParseTCP(offset int, flowMessage *ProtoProducerMessage, data []byte) (newOffset int, err error)

func ParseUDP added in v2.1.0

func ParseUDP(offset int, flowMessage *ProtoProducerMessage, data []byte) (newOffset int, err error)

func ProcessMessageIPFIXConfig

func ProcessMessageIPFIXConfig(packet *netflow.IPFIXPacket, samplingRateSys SamplingRateSystem, config *producerConfigMapped) (flowMessageSet []producer.ProducerMessage, err error)

Convert a NetFlow datastructure to a FlowMessage protobuf Does not put sampling rate

func ProcessMessageNetFlowLegacy

func ProcessMessageNetFlowLegacy(packet *netflowlegacy.PacketNetFlowV5) ([]producer.ProducerMessage, error)

func ProcessMessageNetFlowV9Config

func ProcessMessageNetFlowV9Config(packet *netflow.NFv9Packet, samplingRateSys SamplingRateSystem, config *producerConfigMapped) (flowMessageSet []producer.ProducerMessage, err error)

Convert a NetFlow datastructure to a FlowMessage protobuf Does not put sampling rate

func ProcessMessageSFlowConfig

func ProcessMessageSFlowConfig(packet *sflow.Packet, config *producerConfigMapped) (flowMessageSet []producer.ProducerMessage, err error)

Converts an sFlow message

func ProtoRenderer

func ProtoRenderer(msg *ProtoProducerMessage, fieldName string, data interface{}) interface{}

func RenderIP

func RenderIP(addr []byte) string

func SearchNetFlowDataSets

func SearchNetFlowDataSets(version uint16, baseTime uint32, uptime uint32, dataFlowSet []netflow.DataFlowSet, mapperNetFlow *NetFlowMapper, mapperSFlow *SFlowMapper) (flowMessageSet []producer.ProducerMessage, err error)

func SearchNetFlowDataSetsRecords

func SearchNetFlowDataSetsRecords(version uint16, baseTime uint32, uptime uint32, dataRecords []netflow.DataRecord, mapperNetFlow *NetFlowMapper, mapperSFlow *SFlowMapper) (flowMessageSet []producer.ProducerMessage, err error)

func SearchNetFlowLegacyRecords

func SearchNetFlowLegacyRecords(baseTime uint64, uptime uint32, dataRecords []netflowlegacy.RecordsNetFlowV5) (flowMessageSet []producer.ProducerMessage)

func SearchNetFlowOptionDataSets

func SearchNetFlowOptionDataSets(dataFlowSet []netflow.OptionsDataFlowSet) (samplingRate uint32, found bool, err error)

func SearchSFlowSampleConfig

func SearchSFlowSampleConfig(flowMessage *ProtoProducerMessage, flowSample interface{}, config *SFlowMapper) error

func SearchSFlowSamplesConfig

func SearchSFlowSamplesConfig(samples []interface{}, config *SFlowMapper) (flowMessageSet []producer.ProducerMessage, err error)

func StringRenderer added in v2.1.2

func StringRenderer(msg *ProtoProducerMessage, fieldName string, data interface{}) interface{}

func WriteDecoded

func WriteDecoded(o int64, out interface{}) error

func WriteUDecoded

func WriteUDecoded(o uint64, out interface{}) error

Types

type DataMap

type DataMap struct {
	MapConfigBase
}

type DataMapLayer

type DataMapLayer struct {
	MapConfigBase
	Offset int
	Length int
}

func GetSFlowConfigLayer

func GetSFlowConfigLayer(m *SFlowMapper, layer string) []DataMapLayer

type EndianType

type EndianType string

type FormatterConfig

type FormatterConfig struct {
	Fields   []string                  `yaml:"fields"`
	Key      []string                  `yaml:"key"`
	Render   map[string]RendererID     `yaml:"render"`
	Rename   map[string]string         `yaml:"rename"`
	Protobuf []ProtobufFormatterConfig `yaml:"protobuf"`
}

type FormatterConfigMapper

type FormatterConfigMapper struct {
	// contains filtered or unexported fields
}

type IPFIXProducerConfig

type IPFIXProducerConfig struct {
	Mapping []NetFlowMapField `yaml:"mapping"`
}

type MapConfigBase

type MapConfigBase struct {
	// Used if the field inside the protobuf exists
	// also serves as the field when rendering with text
	Destination string
	Endianness  EndianType

	// The following fields are used for mapping
	// when the destination field does not exist
	// inside the protobuf
	ProtoIndex int32
	ProtoType  ProtoType
	ProtoArray bool
}

Structure to help the MapCustom functions populate the protobuf data

type NetFlowMapField

type NetFlowMapField struct {
	PenProvided bool   `yaml:"penprovided"`
	Type        uint16 `yaml:"field"`
	Pen         uint32 `yaml:"pen"`

	Destination string     `yaml:"destination"`
	Endian      EndianType `yaml:"endianness"`
}

type NetFlowMapper

type NetFlowMapper struct {
	// contains filtered or unexported fields
}

func (*NetFlowMapper) Map

func (m *NetFlowMapper) Map(field netflow.DataField) (DataMap, bool)

type NetFlowV9ProducerConfig

type NetFlowV9ProducerConfig struct {
	Mapping []NetFlowMapField `json:"mapping"`
}

type ProducerConfig

type ProducerConfig struct {
	Formatter FormatterConfig `yaml:"formatter"`

	IPFIX     IPFIXProducerConfig     `yaml:"ipfix"`
	NetFlowV9 NetFlowV9ProducerConfig `yaml:"netflowv9"`
	SFlow     SFlowProducerConfig     `yaml:"sflow"` // also used for IPFIX data frames

}

type ProtoProducer

type ProtoProducer struct {
	// contains filtered or unexported fields
}

func (*ProtoProducer) Close

func (p *ProtoProducer) Close()

func (*ProtoProducer) Commit

func (p *ProtoProducer) Commit(flowMessageSet []producer.ProducerMessage)

func (*ProtoProducer) Produce

func (p *ProtoProducer) Produce(msg interface{}, args *producer.ProduceArgs) (flowMessageSet []producer.ProducerMessage, err error)

type ProtoProducerMessage

type ProtoProducerMessage struct {
	flowmessage.FlowMessage
	// contains filtered or unexported fields
}

func (*ProtoProducerMessage) FormatMessageReflectCustom

func (m *ProtoProducerMessage) FormatMessageReflectCustom(ext, quotes, sep, sign string, null bool) string

func (*ProtoProducerMessage) FormatMessageReflectJSON

func (m *ProtoProducerMessage) FormatMessageReflectJSON(ext string) string

func (*ProtoProducerMessage) FormatMessageReflectText

func (m *ProtoProducerMessage) FormatMessageReflectText(ext string) string

func (*ProtoProducerMessage) Key

func (m *ProtoProducerMessage) Key() []byte

func (*ProtoProducerMessage) MarshalBinary

func (m *ProtoProducerMessage) MarshalBinary() ([]byte, error)

func (*ProtoProducerMessage) MarshalJSON

func (m *ProtoProducerMessage) MarshalJSON() ([]byte, error)

func (*ProtoProducerMessage) MarshalText

func (m *ProtoProducerMessage) MarshalText() ([]byte, error)

type ProtoType

type ProtoType string

type ProtobufFormatterConfig

type ProtobufFormatterConfig struct {
	Name  string
	Index int32
	Type  string
	Array bool
}

type RenderFunc

type RenderFunc func(msg *ProtoProducerMessage, fieldName string, data interface{}) interface{}

type RendererID

type RendererID string
const (
	RendererNone         RendererID = "none"
	RendererIP           RendererID = "ip"
	RendererMac          RendererID = "mac"
	RendererEtype        RendererID = "etype"
	RendererProto        RendererID = "proto"
	RendererType         RendererID = "type"
	RendererNetwork      RendererID = "network"
	RendererDateTime     RendererID = "datetime"
	RendererDateTimeNano RendererID = "datetimenano"
	RendererString       RendererID = "string"
)

type SFlowMapField

type SFlowMapField struct {
	Layer  string `yaml:"layer"`
	Offset int    `yaml:"offset"` // offset in bits
	Length int    `yaml:"length"` // length in bits

	Destination string     `yaml:"destination"`
	Endian      EndianType `yaml:"endianness"`
}

type SFlowMapper

type SFlowMapper struct {
	// contains filtered or unexported fields
}

type SFlowProducerConfig

type SFlowProducerConfig struct {
	Mapping []SFlowMapField `yaml:"mapping"`
}

type SamplingRateSystem

type SamplingRateSystem interface {
	GetSamplingRate(version uint16, obsDomainId uint32) (uint32, error)
	AddSamplingRate(version uint16, obsDomainId uint32, samplingRate uint32)
}

func CreateSamplingSystem

func CreateSamplingSystem() SamplingRateSystem

type SingleSamplingRateSystem

type SingleSamplingRateSystem struct {
	Sampling uint32
}

func (*SingleSamplingRateSystem) AddSamplingRate

func (s *SingleSamplingRateSystem) AddSamplingRate(version uint16, obsDomainId uint32, samplingRate uint32)

func (*SingleSamplingRateSystem) GetSamplingRate

func (s *SingleSamplingRateSystem) GetSamplingRate(version uint16, obsDomainId uint32) (uint32, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL