[ovs-dev] [PATCH v3 2/3] datapath-windows: Add multiple switch internal ports
Alin Serdean
aserdean at cloudbasesolutions.com
Fri Aug 12 21:23:49 UTC 2016
Hi Sai,
Thanks a lot for the review!
Comments inlined.
Alin.
> -----Original Message-----
> From: Sairam Venugopal [mailto:vsairam at vmware.com]
> Sent: Wednesday, August 10, 2016 1:16 AM
> To: Alin Serdean <aserdean at cloudbasesolutions.com>;
> dev at openvswitch.org
> Subject: Re: [ovs-dev] [PATCH v3 2/3] datapath-windows: Add multiple
> switch internal ports
>
> >
> >- if (status == NDIS_STATUS_SUCCESS) {
>
> Sai: Could switchFwdInfo.vport be NULL is status ==
> NDIS_STATUS_SUCCESS?
[Alin Serdean] Yes status can be SUCCESS and the switchFwdInfo.vport can be NULL.
>
> >+ if (status == NDIS_STATUS_SUCCESS && switchFwdInfo.vport != NULL) {
> > ASSERT(newNbl);
> >+ ovsFwdCtx->srcVportNo = switchFwdInfo.vport->portNo;
> >+ ovsFwdCtx->fwdDetail->SourcePortId = switchFwdInfo.vport->portId;
> >+ vsFwdCtx->fwdDetail->SourceNicIndex =
>
> Sai: Do we need the following function - OvsLookupFlowOutput?
[Alin Serdean] Yes we still need it to rematch flows from internal ports.
>
> > OvsLookupFlowOutput(POVS_SWITCH_CONTEXT switchContext,
> > */
> >- ASSERT(switchContext->internalVport);
>
> Sai: Shouldn¹t the Assert check for (countInternalVports > 0)?
[Alin Serdean] Yes you are right.
>
> >+ ASSERT(switchContext->countInternalVports >= 0);
> > status = OvsInitForwardingCtx(&ovsFwdCtx, switchContext, curNbl,
> > internalVport->portNo, 0,
> >
> >+ ExAcquireResourceExclusiveLite(&instance->lock, TRUE);
> >+ if (OvsCheckInstanceRow(&instance->internalRow,
> >+ &ipRow->InterfaceLuid,
> >+ ipRow->InterfaceIndex)
> >+ ) {
>
> Sai: ix the alignment of these braces ({
[Alin Serdean] +1
>
> >+
> > /*
> > * Update the IP Interface Row
> > */
> >- NdisAcquireSpinLock(&ovsIpHelperLock);
> >- RtlCopyMemory(&ovsInternalIPRow, ipRow,
> >- sizeof (PMIB_IPINTERFACE_ROW));
> >- ovsInternalIPConfigured = TRUE;
> >- NdisReleaseSpinLock(&ovsIpHelperLock);
> >+ RtlCopyMemory(&instance->internalIPRow, ipRow,
> >+ sizeof(PMIB_IPINTERFACE_ROW));
>
> Sai: Minor - fix alignment
[Alin Serdean] +1
>
> >OvsGetIPInterfaceEntry(instance->internalRow.InterfaceLuid,
> >+ &instance->internalIPRow);
> >
> >- OvsCleanupFwdTable();
> >+ if (tatus == STATUS_SUCCESS) {
> >+ instance->isIpConfigured = TRUE;
> > }
>
> ai: Fix alignment
[Alin Serdean] +1
>
> >+ else {
> >+ goto error;
> >+ }
> >+
> >+ status = OvsGetIPEntry(instance->internalRow.InterfaceLuid,
> >&ipEntry);
> >+ if (status != STATUS_SUCCESS) {
> >+ OVS_LOG_INFO("Fail to get IP entry for internal port with
> >GUID"
>
> Sai: Fix alignment
[Alin Serdean] +1
>
>
> >+ ExAcquireResourceExclusiveLite(&instance->lock, TRUE);
> >+ if (OvsCheckInsanceRow(&instance->internalRow,
> >&ipRow->InterfaceLuid,
>
> Sai: This should be aligned with the other arguments
[Alin Serdean] +1
>
> >- if (ipRoute->InterfaceLuid.Info.NetLuidIndex ==
> >- ovsInternalRow.InterfaceLuid.Info.NetLuidIndex &&
> >- ipRoute->InterfaceLuid.Info.IfType ==
> >- ovsInternalRow.InterfaceLuid.Info.IfType &&
> >- ipRoute->InterfaceIndex == ovsInternalRow.InterfaceIndex) {
> >+ ExAcquireResourceExclusiveLite(&instance->lock, TRUE);
> >+ if (instance->isIpConfigured &&
> >+ OvsCheckInstanceRow(&instance->internalRow,
> >+ &ipRoute->InterfaceLuid,
> >+ ipRoute->InterfaceIndex)
>
> Sai: Fix the alignment for the braces
[Alin Serdean] +1
>
> >+ ExAcquireResourceExclusiveLite(&instance->lock, TRUE);
> >+ if (instance->isIpConfigured &&
> >+ OvsCheckInstanceRow(&instance->internalRow,
> >+ &unicastRow->InterfaceLuid,
> >+ unicastRow->InterfaceIndex)
>
> Sai: Fix the alignment for the braces
[Alin Serdean] +1
>
>
> >+ ExAcquireResourceExclusiveLite(&instance->lock, TRUE);
> >+ if (instance->isIpConfigured &&
> >+ OvsCheckInstanceRow(&instance->internalRow,
> >+ &unicastRow->InterfaceLuid,
> >+ unicastRow->InterfaceIndex)
>
> Sai: Fix the alignment for the braces
[Alin Serdean] +1
>
>
> >+ ) {
> >+
> > static VOID
> > OvsHandleInternalAdapterUp(POVS_IP_HELPER_REQUEST request)
> > {
>
> Sai: request is referenced underneath. You can remove this line.
[Alin Serdean] +1
>
> >+ UNREFERENCED_PARAMETER(request);
> >+ if (status != STATUS_SUCCESS) {
> >+ OVS_LOG_ERROR("Fail to get IF entry for internal port with
> >GUID"
>
> Sai: I feel we should add a function for printing GUID PrintGuid(logLevel,
> char * msg, GUID guid)
> This code is copied over too many times and might make the file look
> cleaner.
[Alin Serdean] I will look how can I improve it in the next version
>
> >+ "
> >%08x-%04x-%04x-%04x-%02x%02x%02x%02x%02x%02x",
> >+ instance->netCfgId.Data1,
> >+ instance->netCfgId.Data2,
> >+ instance->netCfgId.Data3,
> >+ *(UINT16 *)instance->netCfgId.Data4,
> >+ instance->netCfgId.Data4[2],
> >+ instance->netCfgId.Data4[3],
> >+ instance->netCfgId.Data4[4],
> >+ instance->netCfgId.Data4[5],
> >+ instance->netCfgId.Data4[6],
> >+ instance->netCfgId.Data4[7]);
> >+ break;
> >+ }
> >
> >- if (status != STATUS_SUCCESS) {
> >- OVS_LOG_ERROR("Fali to get IF entry for internal port with GUID"
>
> Sai: Fail not Fali
[Alin Serdean] +1
>
> >- " %08x-%04x-%04x-%04x-%02x%02x%02x%02x%02x%02x",
> >- netCfgInstanceId->Data1,
> >- netCfgInstanceId->Data2,
> >- netCfgInstanceId->Data3,
> >- *(UINT16 *)netCfgInstanceId->Data4,
> >- netCfgInstanceId->Data4[2],
> >- netCfgInstanceId->Data4[3],
> >- netCfgInstanceId->Data4[4],
> >- netCfgInstanceId->Data4[5],
> >- netCfgInstanceId->Data4[6],
> >- netCfgInstanceId->Data4[7]);
> >- return;
> >- }
> >- if (status != STATUS_SUCCESS) {
> >- OVS_LOG_INFO("Fali to get IP entry for internal port with GUID"
>
> Sai: Fail not Fali. Should probably use Failed* instead of Fail.
[Alin Serdean] +1
>
>
> > OvsInitIpHelper(NDIS_HANDLE ndisFilterHandle)
> > {
> >- NTSTATUS status;
>
> Sai: ndisFilterHandle is referenced
[Alin Serdean] will remove the line in the next version
>
> >+ UNREFERENCED_PARAMETER(ndisFilterHandle);
> >+ NTSTATUS status = NDIS_STATUS_SUCCESS;
> > if (OvsIsRealExternalVport(vport)) {
> >- OvsRemoveAndDeleteVport(NULL, switchContext, vport, FALSE,
> TRUE);
>
> Sai: Is this an existing bug?
[Alin Serdean] Yep. This does not allow a physical port to be deleted from OVS. Eg: if you disable the network adapter on which the switch was created, you need to re-enable the extension so you can add the port back.
I will remove it from the series and send it out in a different patch.
>
> >+ OvsRemoveAndDeleteVport(NULL, switchContext, vport, TRUE,
> FALSE);
> > OvsPostVportEvent(&event);
> > }
> > }
> > break;
> > case NdisSwitchPortTypeInternal:
> >- ASSERT(vport->isBridgeInternal == FALSE);
> > switchContext->internalPortId = vport->portId;
>
> Sai: Why do we still have (switchContext->internalPortId = vport->portId)?
[Alin Serdean] Forgot to nuke it. I will delete the member in the next version
>
More information about the dev
mailing list