MCPcopy
hub / github.com/google/gvisor / newVeth

Method newVeth

pkg/sentry/socket/netstack/stack.go:419–518  ·  view source on GitHub ↗
(ctx context.Context, linkAttrs map[uint16]nlmsg.BytesView, linkInfoAttrs map[uint16]nlmsg.BytesView)

Source from the content-addressed store, hash-verified

417const defaultMTU = 1500
418
419func (s *Stack) newVeth(ctx context.Context, linkAttrs map[uint16]nlmsg.BytesView, linkInfoAttrs map[uint16]nlmsg.BytesView) *syserr.Error {
420 var (
421 linkInfoData map[uint16]nlmsg.BytesView
422 ifinfomsg linux.InterfaceInfoMessage
423 peerLinkAttrs map[uint16]nlmsg.BytesView
424 )
425
426 peerStack := s
427 peerName := ""
428 ifname := ""
429
430 if v, ok := linkAttrs[linux.IFLA_IFNAME]; ok {
431 ifname = v.String()
432 }
433 if value, ok := linkInfoAttrs[linux.IFLA_INFO_DATA]; ok {
434 linkInfoData, ok = nlmsg.AttrsView(value).Parse()
435 if !ok {
436 return syserr.ErrInvalidArgument
437 }
438 if v, ok := linkInfoData[linux.VETH_INFO_PEER]; ok {
439 attrsView := nlmsg.AttrsView(v[ifinfomsg.SizeBytes():])
440 if !ok {
441 return syserr.ErrInvalidArgument
442 }
443 peerLinkAttrs, ok = attrsView.Parse()
444 if !ok {
445 return syserr.ErrInvalidArgument
446 }
447 if v, ok = peerLinkAttrs[linux.IFLA_IFNAME]; ok {
448 peerName = v.String()
449 }
450 if v, ok = peerLinkAttrs[linux.IFLA_NET_NS_FD]; ok {
451 fd, ok := v.Uint32()
452 if !ok {
453 return syserr.ErrInvalidArgument
454 }
455 f := inet.NamespaceByFDFromContext(ctx)
456 if f == nil {
457 return syserr.ErrInvalidArgument
458 }
459 ns, err := f(int32(fd))
460 if err != nil {
461 return syserr.FromError(err)
462 }
463 defer ns.DecRef(ctx)
464 peerStack = ns.Stack().(*Stack)
465 }
466 }
467 }
468
469 dstNs, sysErr := s.lockSrcAndDst(ctx, linkAttrs)
470 if sysErr != nil {
471 return sysErr
472 }
473 ep, peerEP := veth.NewPair(defaultMTU, veth.DefaultBacklogSize)
474 id := s.Stack.NextNICID()
475 peerID := peerStack.Stack.NextNICID()
476 if ifname == "" {

Callers 1

newInterfaceMethod · 0.95

Calls 15

lockSrcAndDstMethod · 0.95
unlockSrcAndDstMethod · 0.95
setLinkLockedMethod · 0.95
AttrsViewTypeAlias · 0.92
NamespaceByFDFromContextFunction · 0.92
FromErrorFunction · 0.92
NewPairFunction · 0.92
NewFunction · 0.92
NewFunction · 0.92
TranslateNetstackErrorFunction · 0.92
NextNICIDMethod · 0.80
CreateNICWithOptionsMethod · 0.80

Tested by

no test coverage detected