pkg/accesslog/collector/transfer.go (50 lines of code) (raw):
// Licensed to Apache Software Foundation (ASF) under one or more contributor
// license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright
// ownership. Apache Software Foundation (ASF) licenses this file to you under
// the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package collector
import (
"github.com/apache/skywalking-rover/pkg/accesslog/collector/protocols"
"github.com/apache/skywalking-rover/pkg/accesslog/common"
"github.com/apache/skywalking-rover/pkg/module"
"github.com/cilium/ebpf"
"github.com/cilium/ebpf/link"
)
var transferCollectInstance = NewTransferCollector()
type TransferCollector struct {
protocolQueue *protocols.AnalyzeQueue
}
func NewTransferCollector() *TransferCollector {
return &TransferCollector{}
}
func (t *TransferCollector) Start(_ *module.Manager, context *common.AccessLogContext) error {
queue, err := protocols.NewAnalyzeQueue(context)
if err != nil {
return err
}
t.protocolQueue = queue
t.protocolQueue.Start(context.RuntimeContext)
context.BPF.AddTracePoint("skb", "skb_copy_datagram_iovec", context.BPF.TracepointSkbCopyDatagramIovec)
context.BPF.AddLink(link.Kprobe, map[string]*ebpf.Program{"security_socket_sendmsg": context.BPF.SecuritySocketSendmsg})
context.BPF.AddLink(link.Kprobe, map[string]*ebpf.Program{"security_socket_recvmsg": context.BPF.SecuritySocketRecvmsg})
context.BPF.AddTracePoint("syscalls", "sys_enter_write", context.BPF.TracepointEnterWrite)
context.BPF.AddTracePoint("syscalls", "sys_exit_write", context.BPF.TracepointExitWrite)
context.BPF.AddTracePoint("syscalls", "sys_enter_read", context.BPF.TracepointEnterRead)
context.BPF.AddTracePoint("syscalls", "sys_exit_read", context.BPF.TracepointExitRead)
context.BPF.AddTracePoint("syscalls", "sys_enter_readv", context.BPF.TracepointEnterReadv)
context.BPF.AddTracePoint("syscalls", "sys_exit_readv", context.BPF.TracepointExitReadv)
context.BPF.AddTracePoint("syscalls", "sys_enter_sendto", context.BPF.TracepointEnterSendto)
context.BPF.AddTracePoint("syscalls", "sys_exit_sendto", context.BPF.TracepointExitSendto)
context.BPF.AddTracePoint("syscalls", "sys_enter_writev", context.BPF.TracepointEnterWritev)
context.BPF.AddTracePoint("syscalls", "sys_exit_writev", context.BPF.TracepointExitWritev)
context.BPF.AddTracePoint("syscalls", "sys_enter_sendmsg", context.BPF.TracepointEnterSendmsg)
context.BPF.AddTracePoint("syscalls", "sys_exit_sendmsg", context.BPF.TracepointExitSendmsg)
context.BPF.AddTracePoint("syscalls", "sys_enter_sendmmsg", context.BPF.TracepointEnterSendmmsg)
context.BPF.AddTracePoint("syscalls", "sys_exit_sendmmsg", context.BPF.TracepointExitSendmmsg)
context.BPF.AddSysCall("recv", context.BPF.SysRecv, context.BPF.SysRecvRet)
context.BPF.AddTracePoint("syscalls", "sys_enter_recvfrom", context.BPF.TracepointEnterRecvfrom)
context.BPF.AddTracePoint("syscalls", "sys_exit_recvfrom", context.BPF.TracepointExitRecvfrom)
context.BPF.AddTracePoint("syscalls", "sys_enter_recvmsg", context.BPF.TracepointEnterRecvmsg)
context.BPF.AddTracePoint("syscalls", "sys_exit_recvmsg", context.BPF.TracepointExitRecvmsg)
context.BPF.AddTracePoint("syscalls", "sys_enter_recvmmsg", context.BPF.TracepointEnterRecvmmsg)
context.BPF.AddTracePoint("syscalls", "sys_exit_recvmmsg", context.BPF.TracepointExitRecvmmsg)
return nil
}
func (t *TransferCollector) Stop() {
}