【OVS2.5.0源码分析】mirror实现原理(1)

本文深入探讨OVS2.5.0中mirror功能的实现原理,重点关注配置mirror后如何在xlate_actions函数中生成流表,以及这一过程在报文处理的哪个阶段发生。
摘要由CSDN通过智能技术生成

端口镜像是交换机的标准功能之一,针对某个端口的报文拷贝到除真实目的之外的另外一个目的地(output),这一篇我们先分析配置mirror之后,如何生成流表,在什么阶段生成流表。

1、xlate_actions函数

            mirror_ingress_packet(&ctx);   //生成满足入端口的流表生成,即进入该端口的报文会被镜像到其他目的地。
            do_xlate_actions(ofpacts, ofpacts_len, &ctx);   //解析成精确流表。 针对源端口的mirror,先执行mirror动作,再执行其他操作。
            if (ctx.error) {
                goto exit;
            }

mirror_ingress_packet函数

static void
mirror_ingress_packet(struct xlate_ctx *ctx)
{
    if (mbridge_has_mirrors(ctx->xbridge->mbridge)) {
        bool warn = ctx->xin->packet != NULL;
        struct xbundle *xbundle = lookup_input_bundle(
            ctx->xbridge, ctx->xin->flow.in_port.ofp_port, warn, NULL);
        if (xbundle) {
            mirror_packet(ctx, xbundle,    //生成mirror的精确流表
                          xbundle_mirror_src(ctx->xbridge, xbundle));
        }
    }
}
mirror_packet函数

static void
mirror_packet(struct xlate_ctx *ctx, struct xbundle *xbundle,
              mirror_mask_t mirrors)
{
    /* Figure out what VLAN the packet is in (because mirrors can select
     * packets on basis of VLAN). */
    bool warn = ctx->xin->packet != NULL;
    uint16_t vid = vlan_tci_to_vid(ctx->xin->flow.vlan_tci);
    if (!input_vid_is_valid(vid, xbundle, warn)) {
        return;
    }
    uint16_t vlan = input_vid_to_vlan(xbundle, vid);

    const st
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值