Network coding theory