MCPcopy Create free account
hub / github.com/google/nftables / marshalData

Method marshalData

expr/expr.go:364–402  ·  view source on GitHub ↗
(fam byte)

Source from the content-addressed store, hash-verified

362}
363
364func (e *Masq) marshalData(fam byte) ([]byte, error) {
365 msgData := []byte{}
366 if !e.ToPorts {
367 flags := uint32(0)
368 if e.Random {
369 flags |= NF_NAT_RANGE_PROTO_RANDOM
370 }
371 if e.FullyRandom {
372 flags |= NF_NAT_RANGE_PROTO_RANDOM_FULLY
373 }
374 if e.Persistent {
375 flags |= NF_NAT_RANGE_PERSISTENT
376 }
377 if flags != 0 {
378 flagsData, err := netlink.MarshalAttributes([]netlink.Attribute{
379 {Type: unix.NFTA_MASQ_FLAGS, Data: binaryutil.BigEndian.PutUint32(flags)}})
380 if err != nil {
381 return nil, err
382 }
383 msgData = append(msgData, flagsData...)
384 }
385 } else {
386 regsData, err := netlink.MarshalAttributes([]netlink.Attribute{
387 {Type: unix.NFTA_MASQ_REG_PROTO_MIN, Data: binaryutil.BigEndian.PutUint32(e.RegProtoMin)}})
388 if err != nil {
389 return nil, err
390 }
391 msgData = append(msgData, regsData...)
392 if e.RegProtoMax != 0 {
393 regsData, err := netlink.MarshalAttributes([]netlink.Attribute{
394 {Type: unix.NFTA_MASQ_REG_PROTO_MAX, Data: binaryutil.BigEndian.PutUint32(e.RegProtoMax)}})
395 if err != nil {
396 return nil, err
397 }
398 msgData = append(msgData, regsData...)
399 }
400 }
401 return msgData, nil
402}
403
404func (e *Masq) unmarshal(fam byte, data []byte) error {
405 ad, err := netlink.NewAttributeDecoder(data)

Callers 1

marshalMethod · 0.95

Calls 1

PutUint32Method · 0.65

Tested by

no test coverage detected