netns.py 669 B

12345678910111213141516171819202122232425262728293031
  1. # SPDX-License-Identifier: GPL-2.0
  2. from .utils import ip
  3. import random
  4. import string
  5. class NetNS:
  6. def __init__(self, name=None):
  7. if name:
  8. self.name = name
  9. else:
  10. self.name = ''.join(random.choice(string.ascii_lowercase) for _ in range(8))
  11. ip('netns add ' + self.name)
  12. def __del__(self):
  13. if self.name:
  14. ip('netns del ' + self.name)
  15. self.name = None
  16. def __enter__(self):
  17. return self
  18. def __exit__(self, ex_type, ex_value, ex_tb):
  19. self.__del__()
  20. def __str__(self):
  21. return self.name
  22. def __repr__(self):
  23. return f"NetNS({self.name})"