def _create_sa(self, src_selector, dst_selector, src_port, dst_port, spi, ip_proto,
ipsec_proto, mode, src, dst, enc_algorith, sk_e, auth_algorithm, sk_a):
usersa = XfrmUserSaInfo(
sel=XfrmSelector(family=socket.AF_INET,
daddr=XfrmAddress.from_ipaddr(dst_selector[0]),
saddr=XfrmAddress.from_ipaddr(src_selector[0]),
dport=dst_port,
sport=src_port,
dport_mask=0 if dst_port == 0 else 0xFFFF,
sport_mask=0 if src_port == 0 else 0xFFFF,
prefixlen_d=dst_selector.prefixlen,
prefixlen_s=src_selector.prefixlen,
proto=ip_proto),
id=XfrmId(daddr=XfrmAddress.from_ipaddr(dst),
proto=(socket.IPPROTO_ESP
if ipsec_proto == Proposal.Protocol.ESP else socket.IPPROTO_AH),
spi=create_byte_array(spi)),
family=socket.AF_INET,
saddr=XfrmAddress.from_ipaddr(src),
mode=mode,
lft=XfrmLifetimeCfg.infinite(),
)
attributes = {}
if ipsec_proto == Proposal.Protocol.ESP:
attributes[XFRMA_ALG_CRYPT] = XfrmAlgo.build(alg_name=self._cipher_names[enc_algorith],
key=sk_e)
attributes[XFRMA_ALG_AUTH] = XfrmAlgo.build(alg_name=self._auth_names[auth_algorithm],
key=sk_a)
self.send_recv(XFRM_MSG_NEWSA, (NLM_F_REQUEST | NLM_F_ACK), usersa, attributes)
评论列表
文章目录