blob: 5b060b6f5f9038dff04c06f1a2abf06ba88dcd9b [file] [log] [blame]
Hyunsun Moon6ff622e2020-03-11 17:14:48 -07001#!/usr/bin/env python
2# SPDX-License-Identifier: Apache-2.0
Hyunsun Moon6ff622e2020-03-11 17:14:48 -07003# Copyright(c) 2019 Intel Corporation
4
5import os
6import signal
7import socket
8import sys
9
10import iptools
11import json
12import psutil
13from pyroute2 import IPDB
14
15
16def exit(code, msg):
17 print(msg)
18 sys.exit(code)
19
20
21def getpid(process_name):
22 for proc in psutil.process_iter(attrs=['pid', 'name']):
23 if process_name == proc.info['name']:
24 return proc.info['pid']
25
26
27def getpythonpid(process_name):
28 for proc in psutil.process_iter(attrs=['pid', 'cmdline']):
29 if len(proc.info['cmdline']) < 2:
30 continue
31 if process_name in proc.info['cmdline'][1] and 'python' in proc.info['cmdline'][0]:
32 return proc.info['pid']
33 return
34
Hyunsun Moon6ff622e2020-03-11 17:14:48 -070035def get_json_conf(path, dump):
36 conf = json.loads(open(path).read())
37 if dump:
38 print(json.dumps(conf, indent=4, sort_keys=True))
39 return conf
40
41
42def get_env(varname, default=None):
43 try:
44 var = os.environ[varname]
45 return var
46 except KeyError:
47 if default is not None:
48 return '{}'.format(default)
49 else:
50 exit(1, 'Empty env var {}'.format(varname))
51
52
53def ips_by_interface(name):
54 ipdb = IPDB()
55 return [ipobj[0] for ipobj in ipdb.interfaces[name]['ipaddr'].ipv4]
56
57
58def mac_by_interface(name):
59 ipdb = IPDB()
60 return ipdb.interfaces[name]['address']
61
62
63def mac2hex(mac):
64 return int(mac.replace(':', ''), 16)
65
66
67def peer_by_interface(name):
68 ipdb = IPDB()
69 try:
70 peer_idx = ipdb.interfaces[name]['link']
71 peer_name = ipdb.interfaces[peer_idx]['ifname']
72 except:
73 raise Exception('veth interface {} does not exist'.format(name))
74 else:
75 return peer_name
76
77
78def aton(ip):
79 return socket.inet_aton(ip)
80
81
82def validate_cidr(cidr):
83 return iptools.ipv4.validate_cidr(cidr)
84
85
86def cidr2mask(cidr):
87 _, prefix = cidr.split('/')
88 return format(0xffffffff << (32 - int(prefix)), '08x')
89
90
91def cidr2block(cidr):
92 return iptools.ipv4.cidr2block(cidr)
93
94
95def ip2hex(ip):
96 return iptools.ipv4.ip2hex(ip)
97
98
99def ip2long(ip):
100 return iptools.ipv4.ip2long(ip)
101
102
103def get_process_affinity():
104 return psutil.Process().cpu_affinity()