A DSL for describing and implementing communication protocols