Understood completely.
I appreciate your patience.

Best Regards,
Xuda Zhang

Laine Stump <la...@redhat.com> 于2025年2月5日周三 21:41写道:

> On 2/5/25 1:39 AM, Xuda Zhang wrote:
> > Hi Laine,
> >
> > You mentioned:
> >
> >     But again, already-existing tap devices can't be used for interface
> >     type='bridge' or type='network' (which also connects the tap to a
> >     bridge).
> >
> > However, the documentation does not *explicitly *state that already-
> > existing tap devices *cannot *be used for interface type='bridge' or
> > interface type='network'.
>
> Any reasonably large piece of software has many many behaviors that
> aren't explicitly stated.
>
> > I also conducted another test, which confirmed that whenever the VM is
> > shut down, the existing tap device is deleted.
> > This suggests that the correct understanding is *recreation *rather than
> > modification.
>
> That's basically what I told you. It's unfortunate that I ever brought
> up the idea of pre-existing tap devices, since they are only allowed in
> one very narrow use case.
>
> > Can I conclude that, in a bridge network type, libvirt is expected to
> > create and manage the tap device automatically?
> > This would mean that the tap device is always created by libvirt, its
> > lifecycle is tied to the VM (guest OS), and it is deleted when the VM
> > stops.
>
> Correct.
>
> > Additionally, each time the VM starts, a new tap device is created with
> > slight variations, likely derived from the VM's MAC address.
>
> I guess you mean "... with a MAC address that is the same as the guest
> interface's MAC except the first byte is changed to 0xFE." If so then yes.
>
>
> > Would you agree with this assessment?
>
> Yes.
>
> > Best regards,
> >
> > Xuda Zhang
> >
> >
> >
> > Laine Stump <la...@laine.org <mailto:la...@laine.org>> 于2025年2月5日周
> > 三 14:03写道:
> >
> >     On 2/4/25 11:04 PM, Xuda Zhang wrote:
> >
> >      > Could you help confirm the exact behavior in this case?
> Specifically:
> >      >
> >      >  1. If a target tap device already exists, does libvirt modify
> >     the MAC
> >      >     address instead of recreating the device?
> >
> >     Sorry, I needed to qualify that detail a bit (and actually I probably
> >     shouldn't have even brought it up, since it doesn't apply to tap
> >     devices
> >     used to connect to a bridge device) - *only for
> >     "<interface type='ethernet' managed='no'>" * an already-existing tap
> >     device can be specified in the XML (with <target dev='blah'/>).
> >     type='ethernet' is used for tap devices that aren't connected to any
> >     bridge (all communication with the guest must then be *routed* by the
> >     host at the IP level, rather than being bridged).
> >
> >     And a detail that I misremembered - when libvirt uses a pre-existing
> >     tap
> >     device, it assumes that the creator of the tap already set the MAC
> >     appropriately, so it doesn't modify it.
> >
> >     But again, already-existing tap devices can't be used for interface
> >     type='bridge' or type='network' (which also connects the tap to a
> >     bridge).
> >
> >      >  2. Under what circumstances does libvirt destroy and recreate
> >     the tap
> >      >     device instead of modifying its attributes?
> >
> >     Another detail that I've forgotten over the long time since I last
> >     looked at this code. libvirt doesn't explicitly delete the tap
> device,
> >     it just closes the device. In the case of tap devices that libvirt
> >     itself created, they are automatically deleted when they are closed.
> >
> >     In the case of pre-existing tap devices (which again doesn't apply in
> >     your use case), 1) libvirt assumes that the creator of the
> pre-existing
> >     device has already set the MAC address to something appropriate, so
> it
> >     doesn't attempt to change it, and 2) again libvirt won't explicitly
> >     delete the tap device. If it was created as a persistent device, then
> >     closing it doesn't cause it to be auto-deleted, but if the original
> >     creator of the tap device didn't create it as persistent, and no
> other
> >     process has an open handle for the device, then again closing the
> >     device
> >     will auto-delete it.
> >
> >     But again, for your use case (where the tap is connected to a bridge)
> >     the creator of the tap device is always libvirt, and so it will
> always
> >     be auto-deleted when libvirt closes the final handle it has open on
> the
> >     device.
> >
> >      > Looking forward to your insights!
> >      >
> >      > Best regards,
> >      > Xuda Zhang
> >
>
>

Reply via email to